l>我的新书《Android App开发入门与实战》已于8月由人民邮电出版社出版,欢迎购买。点击进入详情
文章目录
1.开发环境2.第三方库3.实现1.分析url格式2.分析图片格式3.保存图片到本地4.输入页数4.优化1.防止被封2.多线程下载3.便捷获取图片地址5.效果6.Github源码7.Scrapy版今天我们继续爬取妹子图片,通过另一种方式来实现。
上一篇 我们介绍了怎么爬取美女图片,但是还是有一些可以改进的地方。怎么防止被封是否可以利用多线程加快下载速度有没有更方便的方法获取网页图片地址
1.开发环境
IDE: PyCharm .2.1 (Professional Edition)Python: 3.9.72.第三方库
requests:网络请求lxml.etree:分析HTML特征,获取图片地址3.实现
1.分析url格式
我们再找个网站来分析下。
比如这个网站首页是这样的:/tupian/ribenmeinv.html
打开第二页后变成:/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的语法参见:/xpath/xpath-syntax.html
5.效果
6.Github源码
[day2]python网络爬虫实战:爬取美女妹子写真图片(增强版)
7.Scrapy版
[day4]python网络爬虫实战:爬取美女写真图片(Scrapy版)
欢迎关注我的技术公众号:国民程序员,我们的目标:输出干货
每天分享原创技术文章海量免费技术资料和视频学习资源分享赚钱门道,带领程序员走向财务自由