本文主要通过requests模块请求网页,应用正则表达式来解析数据保存糗事百科的图片,同时还能完成分页功能。
一.requests模块的具体使用可以参照这篇文章
二.正则表达式我之前也发过,链接如下:正则表达式
接下来进入写代码环节:
开始,我们导入模块
import re
import requests
import os
创建文件夹,便于保存二进制图片
if not os.path.exists('./糗事百科'):
os.mkdir('./糗事百科/')
添加请求头(用来伪装你是浏览器向服务器发送请求)。
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240"
}
因为这里是我自己的请求头,为了隐私,就不写完了。
我们点击下一页发现只是page后面的参数发生了变化,由1变为了2,由此可以找到他的规律,就可以用for循环对他进行翻页。
我们鼠标选中图片,右击检查,发现src属性是图片网址的一部分,我们通过正则表达式解析,然后对其拼接网址就好了
正则表达式:
ex = '<div class="thumb">.*?<img src="(.*?)" alt=.*?</div>'
下面是翻页和解析网页的源代码
for i in range(1, 6):
new_url = format(url % i)
# print(new_url)
response_text = requests.get(url=url, headers=headers).text
# 通过正则表达式匹配图片的url
img_src_list = re.findall(ex, response_text, re.S)
for img_src in img_src_list:
img_url = "https:" + img_src
file_name = img_src.split('/')[-1] # 命名文件名
img_respons_content = requests.get(url=img_url, headers=headers).content
最后保存图片
with open('./糗事百科/{}'.format(file_name), 'wb') as f:
f.write(img_respons_content)
print(file_name+"保存成功!!")
完整代码如下
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
# @Time : 2020-12-29 17:17
# @author : jianwei
# @Software : PyCharm
import re
import requests
import os
if not os.path.exists('./糗事百科'):
os.mkdir('./糗事百科/')
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0(请求头不方便透露)"
}
url = 'https://www.qiushibaike.com/imgrank/page/%d/'
ex = '<div class="thumb">.*?<img src="(.*?)" alt=.*?</div>' # 正则表达式
# 翻页
for i in range(1, 6):
new_url = format(url % i)
# print(new_url)
response_text = requests.get(url=url, headers=headers).text
# 通过正则表达式匹配图片的url
img_src_list = re.findall(ex, response_text, re.S)
for img_src in img_src_list:
img_url = "https:" + img_src
file_name = img_src.split('/')[-1] # 命名文件名
img_respons_content = requests.get(url=img_url, headers=headers).content
# 保存图片
with open('./糗事百科/{}'.format(file_name), 'wb') as f:
f.write(img_respons_content)
print(file_name+"保存成功!!")
感谢你们的支持与订阅!!