1、目的
高效爬取图片,联系基本的xpath,以及简单函数,文件存储等。
2、逻辑实现
运用requests 发起get请求url 得到response_html
再解析数据
data = etree.HTML(response_html.text)
from lxml import etree
再用xpath定位想要的地址
匹配规则
以虎牙直播为例
按f12 点击元素选择器element
选着图片获得图片位置,上图的img标签中的src data-original 属性为图片地址。
gilrs = data.xpath(’//img[@calss=“pic”]#获得整个页面的girl定位
选择每一个直播图片地址
for girl in girls:#一个直播
选择图片
img_src = girl.xpath(’./@data-original ‘)[0]
img_src是一个列表
img_src = img_src.split(’?’)[0]#选择?左边字符
image = requests.get(url=img_src)
文件名字选择直播名字,选择的直播之前字符
pic_name = girl.xpath(’./@alt’)[0].split(‘的直播’)[0]
文件写入,我的code 与data为同一个文件夹中,用的…/data/+文件名
with open(’…/data/’+pic_name+’.jpg’,‘wb’) as jpg:
jpg.write(image.content)
time.sleep(1)
print( pic_name,’–’,img_src,‘downloading…’)
3、代码
import requests
import time
from lxml import etree
url = 'https://www.huya.com/g/4079'
res = requests.get(url=url)
data = etree.HTML(res.text)
girls = data.xpath('//img[@class="pic"]')
for girl in girls:
pic_name = girl.xpath('./@alt')[0].split('的直播')[0]
img_src = girl.xpath('./@data-original')[0]
img_src = img_src.split('?')[0]
image = requests.get(url=img_src)
with open('../data/'+pic_name+'.jpg','wb') as jpg:
jpg.write(image.content)
time.sleep(1)
print( pic_name,'--',img_src,'downloading..........')
4、结果展示
5、感悟
因为这里数据量比较少,而且访问不多,所以写的比较简单,没有写入请求头,也没有加入代理IP,如果需要爬取大量数据图片,写一个IP池,或者请求头等等。
requests.get(url=url,headers = headers,proxies=proxies)