首先前面来到糗事百科中的热图页面。然后右键检查打开浏览器的抓包工具,如下图所示:
通过对请求headers与响应response与element的分析,我们可以了解到图片链接就在该地址栏的网址下的div标签下的img标签的src中。通过将链接在地址栏输入可以得到验证。然后我们就可以对一个个图片通过正则进行匹配了,通过使用 .*?来匹配一次任意字符串。注意大家写正则的时候,注意原字符串空格等都不要忽略了,否则可能导致匹配失败。我们要匹配的url类似如图所示的src属性:
分页爬取的时候,我们可以观察其他页面的url,下一页中例如https://www.qiushibaike.com/imgrank/page/2/
https://www.qiushibaike.com/imgrank/page/3/
通过地址栏输入,我们可以看到第一页同样有效
https://www.qiushibaike.com/imgrank/page/1/
好了。话不多说,更多分析都在以下代码中
mport requests
import re
import os
#爬取糗事百科中糗图板块下所有的糗图图片
if __name__ == "__main__":
#创建一个文件夹,保存所有图片
if not os.path.exists('./qiutulib'):
os.mkdir('./qiutulib')
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'
}
# url = 'https://www.qiushibaike.com/imgrank/'
#设置一个通用的url模板
url='https://www.qiushibaike.com/imgrank/page/%d'
for pageNum in range(1,3):
new_url = format(url%pageNum) #对应页面的url
#使用通用爬虫对url对应的一整张页面进行爬取
page_text=requests.get(url=new_url,headers=headers).text
#使用聚焦爬虫将页面中所有的图片进行解析/提取
ex = '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'
# ex ='<html xmlns="http://www.w3.org/1999/xhtml">.*?</html>'
img_src_list = re.findall(ex,page_text,re.S) #re.S单行匹配,re.M多行匹配
# print(img_src_list)
for src in img_src_list:
#拼接出一个完整的图片url
src = 'https:'+src
#请求到了图片的二进制数据
img_data = requests.get(url=src,headers=headers).content
#生成图片名称
img_name = src.split('/')[-1]
#图片存储的路径
imgPath = './qiutulib/'+img_name
with open(imgPath,'wb') as fp:
fp.write(img_data)
print(img_data,"下载成功")
打开文件夹如图所示,就可以查看我们爬取的图片了