练习
import requests
import json
if __name__ == "__main__":
# 指定url
url = 'https://pic.qiushibaike.com/system/pictures/12348/123484325/medium/6UZ51MRIVF06EX0A.jpg'
# 进行UA伪装
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36'
}
# content返回的是二进制形式的图片数据
# text(字符串) content(二进制) json() (对象)
img_data = requests.get(url=url).content
# 'wb'为写入二进制
with open('./qiutu.jpg','wb') as fp:
fp.write(img_data)
新学知识:正则表达式在解析界面时一般会用到re.S
爬取糗事百科图片
查看网页的源码我们可以在翻页栏这里看到存有页数的信息,通过正则表达式去获取到最后一项对应的页数,即为总页数
正则的形式可以写成:'<span class="page-numbers">(.*?)</span>'
下面是完整代码
import requests
import json
import re
import os
if __name__ == "__main__":
# 创建一个文件加用来保存所有图片吗
if not os.path.exists('./qiutuLibs'):
os.mkdir('./qiutuLibs')
# 进行UA伪装
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36'
}
# 设置一个通用的url模板
# 指定url
url = 'https://www.qiushibaike.com/imgrank/page/%d'
# 获取总页数
url_first = 'https://www.qiushibaike.com/imgrank'
page_text = requests.get(url=url_first, headers=headers).text
page_nums = re.findall('<span class="page-numbers">(.*?)</span>', page_text, re.S)
page_num = int(page_nums[-1])
# 遍历每一页
for pageNum in range(1,page_num+1):
# 对应页码的url
new_url = format(url%pageNum)
# 使用通用爬虫对url对用的一整张页面进行爬取
page_text = requests.get(url=new_url, headers=headers).text
# 使用聚焦爬虫将页面中所有的图片解析提取
ex = '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'
# 正则作用在数据解析一般使用re.S
img_src = re.findall(ex,page_text,re.S)
# print(img_src)
for src in img_src:
# 协议头拼接,形成完整url
src = 'https:'+src
# 请求到了图片的二进制数据
img_data = requests.get(url=src, headers=headers).content
# 生成图片名称
img_name = src.split('/')[-1]
imgPath = r'./qiutuLibs/'+img_name
with open(imgPath,'wb') as fp:
fp.write(img_data)
print(img_name,"下载成功!!!")