python的一大用途是抓取网页数据。在本文中,我们使用python来抓取网页图像数据,其中网页可分为静态网页和动态网页。我们通常对静态网页使用请求库,对动态网页使用selenium库。我们先来看静态网页抓取。
1元:静态网页抓取

让我们打开一个网址不害羞的网页|一个真实的图片分享交友社区。打开后,我们看到以下内容:
单击下一页,我们看到URL变成了:
所以网站的变化规律是每个页面在基本地址“https://www.buxiuse.com/”后面加上page= number,我们抓取前面60元页面的图片。按F12查看元素,我们可以看到图片元素的标签是:
图片地址在img标签里面,且在src属性值里面,那么可以先定位到img标签,再提取src属性的值便可获取图片地址,我们用到xpath库来提取元素,那么提取图片地址的写法便可以是如果图像地址在img标签中,在src属性值中,可以先定位img标签,然后提取src属性值得到图像地址。我们使用xpath库来提取元素,所以提取图像地址的写法可以是
//img/@src,其中“//”表示在任意位置查找img标签,后面的'/'表示img的子节点,'@src'表示取src属性的值,在这里就是图片的地址。//img/@搜狗翻译还准备了精彩好礼a粉丝在这个夏天给你降温。详情请点击src,其中“//”表示在任意位置查找img标签,下面的“/”表示IMG的子节点,“@搜狗翻译还准备了精彩好礼a粉丝在这个夏天给你降温。详情请点击src '意思是取src属性的值,这里是图片的地址。
因为它同时抓取多个网页,所以我们可以考虑使用多线程抓取更快。
代码如下:
导入操作系统
导入请求
从lxml导入etree
来自urllib。请求导入URL检索#下载图片库
从并发。期货导入线程池执行器#多线程库
数量=0
课程下载:
def __init__:
# self . URL = " https://www . mzi tu . com/"
self . URL = " https://www . buxiuse . com/"
self.list=[]
对于范围内的I:
Self.list.append #抓取六十页照片
self.headers = {
用户代理':' Mozilla/5.0 AppleWebKit/537.36 Chrome/66 . 0 . 3359 . 139 Safari/537.36 '
}
self.mkdir1

def mkdir1:
如果OS.path.exists: #创建一个目录,如果它已经存在,什么都不做。
os.mkdir
定义发送请求:
返回。正文)
定义解析:
tree=etree。HTML)
return tree.xpath #匹配获取img标签下的src属性里面的值,因为图片地址就在src里面返回。XPath #匹配以获得img标记下src属性中的值,因为图像地址在src中。
#这将返回图片地址列表。
Def pachon: #不使用多线程的爬虫功能。
全局编号
对于自我列表中的I:
打印
img_list=self.parseimg_list=self.parse
for j in img_list:对于img_list中的j:
urlretrieve
数字+=1
DEF PACHON _ 1元:#准备下面的多线程
打印
全局编号
img_list=self.parseimg_list=self.parse
for j in img_list:对于img_list中的j:
#urlretrieve[-1])

urlretrieve
数字+=1
定义多进程:#多线程爬虫
i=0
使用ThreadPoolExecutor作为池:
while i+2


