赞
踩
利用Pyhton 爬取图片(定制请求路径,匹配资源)
图片素材链接 (该链接为 站长素材网站下的图片分区的性感美女分区)
https://sc.chinaz.com/tupian/xingganmeinvtupian.html
首先理清楚代码的整体思路,下载多页的图片资源,首先思路是:
因为多页的请求链接是不一样的,需要在代码中自动生成下一页的链接,首先观察链接的规律。
第一页的请求页面(按F12,点击网络查看)
如图所示:第一页请求链接为
https://sc.chinaz.com/tupian/xingganmeinvtupian.html
接下来第二第三页,规律已经发现,第一页为直接是xingganmeninvtupian.html结尾,从第二页开始,第n页后面则加上 **_n** 即可
‘
定制后请求连接后,得到的响应代码要进行解析处理,获取到图片资源的下载垃圾,名字等等。代码中如下:
(浏览器没有xpath插件的读者要先安装在浏览器安装该插件,安装方法可以跳转到其他创作者的,我还没有写)
#定制获取到图片的名字
name_list = tree.xpath('//div[@class="item"]/img/@alt')
print(len(name_list))
# 定制路径获取到图片的资源路径
src_list = tree.xpath('//div[@class="item"]/img/@data-original')
print(len(src_list))
通常刚刚学习的伙伴们会觉得写xpath路径很难,其实看借助xpath helper这个浏览器插件,就可以帮你轻松定位到目标资源,来提示你是否写得正确。下面来进行演示
在网络中,点击响应,查看返回的数据,拉到下面,将看到返回图片的一个一个实体,div标签里面保着img标签,img标签里面有alt属性和data-original属性,这两个属性经过观察,这两个就是名字和图片资源路径,所以我们要获得的就是这两个值。
打开xpath(快捷键 ctrl+shift+x),,如果快捷键打不开xpath,可能是输入法现在是中文,转为英文输入即可,或者刷新一下页面,也可以直接点右上角手动打开(手动比较稳定能打开)
现在则在右边输入匹配字符串,来匹配到对应资源,我们刚刚说过,是div标签里面保着img标签,img标签里面有alt属性和data-original属性。所以 来啦
//div 表示选中所有div, 显示出现了124个结果
但经过我们的观察,我们要的带有图片的div里面,class是item,所以我们可以对div进行筛选,只要class为item
然后我们要的是div里面带有一个子标签是img的,所以后面要加一个 /img,代表匹配所有div带着有一个img子标签的,一共有40个结果
然后我们需要img里面的alt和data-original属性,属性的话用 /@ 来获取
这样子的匹配字符串的完整意思就是 获取 class 为 itm 的 div,然后获取该div下的img子标签的alt属性,另一个属性data-original同理
在请求路径和资源匹配都解决后,则开始写代码,这里不详细一一讲解,可以结合注释学习,或者在评论区评论
一个功能写一个函数是精细化管理的体现,符合开发规范,维护方便
import urllib.request from lxml import etree def create_request(page): # 这个if else 是定制请求路径,如果是第一页,不需要在后面添加 if(page == 1): url = 'https://sc.chinaz.com/tupian/xingganmeinvtupian.html' else: url = 'https://sc.chinaz.com/tupian/xingganmeinvtupian.html_' + str(page) + '.html' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', } request = urllib.request.Request(url = url, headers = headers) return request # 获取响应内容 def get_content(request): response = urllib.request.urlopen(request) content = response.read().decode('utf-8') return content # 下载图片 def down_load(content): # urllib.request.urlretrieve('图片地址','文件的名字') tree = etree.HTML(content) # print(content) name_list = tree.xpath('//div[@class="item"]/img/@alt') print(len(name_list)) # 一般设计图片的网站都会进行懒加载 src_list = tree.xpath('//div[@class="item"]/img/@data-original') print(len(src_list)) for i in range(len(name_list)): name = name_list[i] src = src_list[i] url = 'https:' + src print(url) urllib.request.urlretrieve(url=url,filename='./beautiful/' + name + '.jpg') if __name__ == '__main__': start_page = int(input('请输入起始页码')) end_page = int(input('请输入结束页码')) for page in range(start_page,end_page+1): # (1) 请求对象的定制 request = create_request(page) # (2)获取网页的源码 content = get_content(request) # (3)下载 down_load(content)
如果您对我的内容感兴趣,请关注我,我会持续更新该系列,其他专栏系列设计网络安全,javafx开发等等,十分感谢
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。