l> 我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情
文章目录
- 1.开发环境
- 2.第三方库
- 3.实现
- 1.分析url格式
- 2.分析图片格式
- 3.保存图片到本地
- 4.输入页数
- 4.优化
- 1.防止被封
- 2.多线程下载
- 3.便捷获取图片地址
- 5.效果
- 6.Github源码
- 7.Scrapy版
今天我们继续爬取妹子图片,通过另一种方式来实现。
上一篇 我们介绍了怎么爬取美女图片,但是还是有一些可以改进的地方。
- 怎么防止被封
- 是否可以利用多线程加快下载速度
- 有没有更方便的方法获取网页图片地址
1.开发环境
- IDE: PyCharm 2021.2.1 (Professional Edition)
- Python: 3.9.7
2.第三方库
- requests:网络请求
- lxml.etree:分析HTML特征,获取图片地址
3.实现
1.分析url格式
我们再找个网站来分析下。
比如这个网站首页是这样的:https://sc.chinaz.com/tupian/ribenmeinv.html
打开第二页后变成:https://sc.chinaz.com/tupian/ribenmeinv_2.html
也就是第二页后的格式是index_{N}.html
2.分析图片格式
Chrome通过Ctrl + U查看源码。找到图片列表相关的代码区域:
这个时候我们就可以通过etree的xpath来解析图片格式:
html.xpath("//div[@id='container']/div[@class='box picblock col3']/div/a/img/@src2")
3.保存图片到本地
我们可以通过with open
方式来保存图片:
# 访问图片
data = requests.get(image_url).content
# 保存图片
with open(r"C:/meinv/xxx.jpeg", "wb") as file_object:file_object.write(data)
4.输入页数
pages = int(input("请输入总页数:"))
4.优化
1.防止被封
通过模拟浏览器的特征,让网站认为这条请求是通过浏览器发送的。
我们可以在请求的时候加上一个header字段:
header = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36" }
2.多线程下载
如果打算下载多页上的图片,我们可以考虑将每一页交给一个线程去处理,这样多页就可以行下载本页的图片了。
for page in range(pages):t = threading.Thread(target=fetch, args=(page + 1,))t.start()
3.便捷获取图片地址
xpath是一种路径语言,特别适合XML格式的文档。XML是一种树形结构的文档,xpath就提供了在树形结构文档中查找节点的能力。
而正则表达式可以处理任何格式的字符串文档,通过文本特征来查找指定的数据。
大多数情况下,树的搜索是比字符串搜索快的。
xpath的语法参见:https://www.runoob.com/xpath/xpath-syntax.html
5.效果
6.Github源码
[day2]python网络爬虫实战:爬取美女妹子写真图片(增强版)
7.Scrapy版
[day4]python网络爬虫实战:爬取美女写真图片(Scrapy版)
欢迎关注我的技术公众号:国民程序员,我们的目标:输出干货
- 每天分享原创技术文章
- 海量免费技术资料和视频学习资源
- 分享赚钱门道,带领程序员走向财务自由