爬取糗事百科的热图
设计要求
(1) 从糗事百科 https://www.qiushibaike.com/imgrank/ 抓取所有的图片信息。
(2) 获取前四页所有的图片信息,并用相应的名称命名该图片。
(3) 将图片存储至文件中。
分析
因为打开网站查看内容,网站里面是这样的
我们先向服务器发送一个请求,返回所有的相关资源(这里的new_url=https://www.qiushibaike.com/imgrank/)
page_text=requests.get(url=new_url,headers=headers).text
在返回的资源中找到图片相应的位置,编写正则表达式(目的:在大量的资源中匹配图片的信息,以便我们筛选出来):
ex='.*?
'
选择所有符合正则表达式的图片,用img_src_list来保存
img_src_list=re.findall(ex,page_text,re.S)
img_src_list里面保存的是图片的下载地址,遍历img_src_list,下载图片并保存到相应的位置
for src in img_src_list:src='https:'+srcimg_data=requests.get(url=src,headers=headers).contentimg_name=src.split('/')[-1]imgpath='./img/'+img_namewith open(imgpath,'wb') as fp:fp.write(img_data)
完整的代码如下(还实现翻页的功能):
import requests
import re
import os
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}
if not os.path.exists('./img'):os.mkdir('./img')
url='https://www.qiushibaike.com/imgrank/page/%d/'
for pageNum in range(1,5):print('第{}页开始下载'.format(pageNum))new_url=format(url%pageNum)page_text=requests.get(url=new_url,headers=headers).textex='.*?
'img_src_list
=re
.findall
(ex
,page_text
,re
.S
)for src
in img_src_list
:src
='https:'+srcimg_data
=requests
.get
(url
=src
,headers
=headers
).contentimg_name
=src
.split
('/')[-1]imgpath
='./img/'+img_name
with open(imgpath
,'wb') as fp
:fp
.write
(img_data
)print(img_name
,'下载成功!!!')print('内容全部下载完成!!!') PS:正则表达式是比较重要的,有兴趣的同学可以点击去学习一下正则表达式
本代码只能用于学习