[day2]python网络爬虫实战:爬取美女写真图片(增强版)

l> 我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情


今天我们继续爬取妹子图片,通过另一种方式来实现。
上一篇 我们介绍了怎么爬取美女图片,但是还是有一些可以改进的地方。

  1. 怎么防止被封
  2. 是否可以利用多线程加快下载速度
  3. 有没有更方便的方法获取网页图片地址

1.开发环境

  1. IDE: PyCharm 2021.2.1 (Professional Edition)
  2. Python: 3.9.7

2.第三方库

  1. requests:网络请求
  2. 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版)

欢迎关注我的技术公众号:国民程序员,我们的目标:输出干货

  1. 每天分享原创技术文章
  2. 海量免费技术资料和视频学习资源
  3. 分享赚钱门道,带领程序员走向财务自由
图片名称
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值