前一段时间,通过对爬虫的学习,完成了爬取百度贴吧帖子和爬取糗事百科段子。看着自己爬取下来的文字,心里也是满满的自豪感!
再次打开贴吧,在浏览时发现贴吧也是包含着大量图片,既然爬取下了贴吧文字,那么为何不将百度贴吧的图片爬取下来呢?
说干就干!(代码为python3.x版)
本篇目标
1.对百度贴吧的任意帖子的图片部分进行抓取
2.指定是否只抓取楼主发帖内容图片
3.将抓取到的图片保存到程序目录下
要完成目标,我们先从小方面做起
一.先完成对指定页面图片的爬取
先爬取一个某个页面的图片,链接如下:
http://tieba.baidu.com/p/3223379048?see_lz=1
(1)获取页面代码
import urllib.request
import re
def getPage():
url='http://tieba.baidu.com/p/3223379048?see_lz=1'
request=urllib.request.Request(url) #构建请求的request
response=urllib.request.urlopen(request) #利用urlopen获取页面代码
return response.read().decode('utf-8') #以utf-8编码对字符串进行解码,获得字符串类型对象
print(getPage())
爬取下来的url页面源码过长就不放上来了。
(2)获取页面中想要的图片位置
把鼠标放在谷歌浏览器中想要爬取的内容上,点击右键,选择"检查",打开源码。大家也可以用其他方式查看。
可以写出正则表达式如下:(不明白的可以学习一下正则表达式)
'<img class="BDE_Image".*?src="(.*?)"'
注:
发现存在一些帖子的源码不一样(加了一些前缀什么的),大家可以视情况自行更改正则表达式。
说明:
(1).*? 是一个固定的搭配,.和*代表可以匹配任意无限多个字符,加上?表示使用非贪婪模式进行匹配,也就是会尽可能短地做匹配。
(2)(.*?)代表一个分组,是我们需要的内容。
承接上面,代码如下:
def getIMG():
page=getPage()
pattern=re.compile('<img class="BDE_Image".*?src="(.*?)"',re.S)
#用于将字符串形式的正则表达式编译为Pattern对象,re.S 标志代表在匹配时为点任意匹配模式
img=re.findall(pattern,pag #re.findall可以获取字符串中所有匹配的字符串
return img
<pre class="python" name="code">print(getIMG())
结果举例如下(并非全部匹配结果,结果太长

最低0.47元/天 解锁文章
877

被折叠的 条评论
为什么被折叠?



