Python爬虫入门——爬取贴吧图片

news/2024/11/19 9:33:26/

最近忽然想听一首老歌,“I believe” 于是到网上去搜,把几乎所有的版本的MV都看了一遍(也是够无聊的),最喜欢的还是最初版的《我的野蛮女友》电影主题曲的哪个版本,想起女神全智贤,心血来潮,于是就想到了来一波全MM的美照,哪里有皂片呢?自然是百度贴吧了。

放上链接-————

[plain] view plain copy
print ?
  1. http://tieba.baidu.com/p/3466236659  
http://tieba.baidu.com/p/3466236659

爬取贴吧图片是非常简单的一件事,我们要做的是这么几步:

1、获取要爬取的网址

2、获取此网址的HTML源码

3、用正则表达式找出源码中的图片地址

4、下载图片,完活儿!

就是这么简单。

下面来看代码:

一、预备:

首先要引入相应的python模块。

[python] view plain copy
print ?
  1. import re  
  2. //正则表达式模块,用来匹配图片地址  
  3. import urllib  
  4. //用来获取HTML源码  
  5. import sys    
  6. reload(sys)   
  7. sys.setdefaultencoding(’utf8’)  
  8. //解决文字编码的问题,事实上我的电脑没有这段也OK  
import re
//正则表达式模块,用来匹配图片地址
import urllib
//用来获取HTML源码
import sys  
reload(sys) 
sys.setdefaultencoding('utf8')
//解决文字编码的问题,事实上我的电脑没有这段也OK


二、获取网址源码这一部分十分简单,就是调用urllib模块的函数,直接上代码

[python] view plain copy
print ?
  1. def getHtml(url):  
  2.     page = urllib.urlopen(url)  
  3.     html = page.read()  
  4.     return html  
def getHtml(url):page = urllib.urlopen(url)html = page.read()return html

返回的html自然是url页面的源码,如图



三、匹配源码中的图片地址 并下载之

源码到手之后,要做的就是寻找其中对我们有用的信息啦——就是全MM的图片。我们可以在chrome浏览器中按F12打开源码,或者是邮件图片,点检查,像这样



我们不难看到,我们关心的图片,在HTML中有着相当规范的格式(当然,全MM专贴中基本都是她的图片啦,这让我们的工作简单了好多好多!),就是

src=http://img.***********.jpg

我们用正则表达式,可以轻松完成。(这里不懂得小伙伴需要自己补充一下正则表达式的知识哦)

设置正则:

reg = r'src="(http://img.*?\.jpg)"'

备注:

1、    .*? 三个符号可以匹配任意多个任意符号

2、   \.  是将 ‘.’ 转义,代表的就是HTML中的  .

3、 ()表示 我们只取括号中的部分,省略之外的。


下面继续上代码:

[python] view plain copy
print ?
  1. def getImg(html, x):  
def getImg(html, x):
[python] view plain copy
print ?
  1. //imlist得到的是源码中符合正则reg的图片地址构成的列表  
  2.     reg = r’src=”(http://img.*?\.jpg)”’  
  3.     imgre = re.compile(reg)  
  4.     imList = re.findall(reg, html)  
  5. //打印列表有助于我们在运行中监控他  
  6.     print(imList)  
  7.     for i in imList:  
  8.         print(i)  
  9.         print x  
  10.         urllib.urlretrieve(i, ’%s.jpg’ % x)//下载地址为i的图片,并用x.jpg命名。  
  11.         x += 1  
  12.     return x  
//imlist得到的是源码中符合正则reg的图片地址构成的列表reg = r'src="(http://img.*?\.jpg)"'imgre = re.compile(reg)imList = re.findall(reg, html)
//打印列表有助于我们在运行中监控他print(imList)for i in imList:print(i)print xurllib.urlretrieve(i, '%s.jpg' % x)//下载地址为i的图片,并用x.jpg命名。x += 1return x
这里要说明一下,x变量是我们在下载图片时的计数变量,同时也是命名变量,因为一个帖子是有很多个页面的,因此我们需要处理的HTML源码也有很多个。

将x返回,是为了下次再调用GetImg()的时候,x可以接着上一次的继续累加。


四、多个页面

最后,我们来处理一下多个页面的问题。

非常简单,看图


只需要在网址后面加上?pn=页数 就好了

[python] view plain copy
print ?
  1. url = “http://tieba.baidu.com/p/3466236659?pn=”  
  2. for k in range(128):  
  3.     ul = url+str(k)  
  4.     print ul  
  5.     html = getHtml(ul)  
  6.     # print html  
  7.     x = getImg(html, x)  
url = "http://tieba.baidu.com/p/3466236659?pn="
for k in range(1, 28):ul = url+str(k)print ulhtml = getHtml(ul)# print htmlx = getImg(html, x)


好啦,完成!

下面贴上完整代码:

[python] view plain copy
print ?
  1. import re  
  2. import urllib  
  3. import sys    
  4. reload(sys)   
  5. sys.setdefaultencoding(’utf8’)  
  6. def getHtml(url):  
  7.     page = urllib.urlopen(url)  
  8.     html = page.read()  
  9.     return html  
  10.   
  11. def getImg(html, x):  
  12.     reg = r’src=”(http://img.*?\.jpg)”’  
  13.     imgre = re.compile(reg)  
  14.     imList = re.findall(reg, html)  
  15.   
  16.     print(imList)  
  17.     for i in imList:  
  18.         print(i)  
  19.         print x  
  20.         urllib.urlretrieve(i, ’%s.jpg’ % x)  
  21.         x += 1  
  22.     return x  
  23.   
  24.   
  25. x = 1  
  26. url = ”http://tieba.baidu.com/p/3466236659?pn=”  
  27. for k in range(128):  
  28.     ul = url+str(k)  
  29.     print ul  
  30.     html = getHtml(ul)  
  31.     # print html  
  32.     x = getImg(html, x)  
import re
import urllib
import sys  
reload(sys) 
sys.setdefaultencoding('utf8')
def getHtml(url):page = urllib.urlopen(url)html = page.read()return htmldef getImg(html, x):reg = r'src="(http://img.*?\.jpg)"'imgre = re.compile(reg)imList = re.findall(reg, html)print(imList)for i in imList:print(i)print xurllib.urlretrieve(i, '%s.jpg' % x)x += 1return xx = 1
url = "http://tieba.baidu.com/p/3466236659?pn="
for k in range(1, 28):ul = url+str(k)print ulhtml = getHtml(ul)# print htmlx = getImg(html, x)


下面是我爬到的成果:



希望对大家有帮助。


晚安,明天还有一天的课,估计起不来了。。。。。。。

PS:我是不会翘课的!


————————————————————————————————————————————————————————————————

昨天第一次发blog,格式和图片都没有弄好,多多包涵啦


http://www.ppmy.cn/news/377794.html

相关文章

明星热图|欧阳娜娜、张艺兴代言新品牌;吴彦祖、高圆圆、全智贤演绎服装新品;关晓彤、欧阳靖、张云龙出席品牌活动...

图片是企业新闻传播的要素之一,优秀的图片使读者能更直观地了解新闻内容。“一周热图”栏目为大家展示每周通过美通社发布的最具代表性的企业新闻图片。 服装 潮流运动品牌FILA FUSION正式签约首位品牌代言人欧阳娜娜,这位出生于艺术世家的00后&#xff…

rootfs根文件系统制作及挂载方法-详解

目录 1. 根文件系统简介 2. 根文件系统构建软件 3. busybox构建根文件系统 3.1 BusyBox 简介 3.2 编译 BusyBox 构建根文件系统 3.3 busybox中文字符支持 3.4 配置 busybox 3.5 编译 busybox 4. 根文件系统添加lib库 4.1 rootfs文件系统的“/lib”目录添加库文件 4.…

Linux系统的tty架构及UART驱动详解

​一、模块硬件学习 1.1. Uart介绍 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称为UART,是一种异步收发传输器,是电脑硬件的一部分。它将要传输的资料在串行通信与并行通信之间加以转换。 作为把并…

【Instruction Tuning】ChatGLM 微调实战(附源码)

在之前的文章中,我们已经讲过了 ChatGPT 的三个主要流程: SFT:通过 Instruction Tuning 来微调一个监督学习模型。Reward Model:通过排序序列来训练一个打分模型。Reinforcement Learning:通过强化学习来进一步优化模…

华硕S400装win7

华硕s400电脑,WIN8系统使用不习惯降级到WIN7。 安装WIN7流程: 开机,按F2,进入bios。 到【Security】,选项【Secure Boot Control】,选择【Disabled】, F10保存并重启 按F2进入bios 到【Boot】…

android 游戏语言设置在哪里设置中文版,使命召唤手游语言变更方法 怎么设置中文...

很多小伙伴们在玩使命召唤手游外服的时候,一打开游戏都是英文的界面,那么这款游戏是怎么设置中文的呢,这里就来和大家分享一下使命召唤手游语言变更设置方法,一起来看看吧。 1、我们进入游戏之后,在主界面的右上方可以…

使命召唤手游服务器维护,使命召唤手游国服登录不了如何解决

使命召唤手游是一款很是刺激的多人射击游戏,玩法十分的吸引人,拥有着超高清的画质,很受喜爱,使命召唤手游国服登录不了怎么解决?现在iefans小编就给大家带来介绍,感兴趣就来看看吧。 一、配置问题 使命召唤…

使命召唤手游服务器显示错误,使命召唤手游无法连接服务器是什么原因

使命召唤手游无法连接服务器是什么原因,相信大家在玩使命召唤手游的过程中,经常会遇到这样的问题,下面ourplay小编就简单为大家介绍几种常见的解决方案。 使命召唤手游游戏简介 《使命召唤手游》是一款由动视和腾讯联合推出的大型多人在线第一…