缘起:闲来无事想看漫画,结果该网站比较反人类,一次一张图片就算了加载速度死慢,甚为气恼,听说python能够实现图片分析下载,而近期又总听到python这个词,于是打算学习一下,杂七杂八的不说直接从爬图片开始吧。
import requests #引入requests库,默认是没有的需要安装,主要是获取网页数据
from lxml import etree #引入lxml 库 默认没有安装需要安装,主要是解析网页数据,在该实例中主要是为解析图片原始链接
url ='链接自己填' #分析下载图片的原始网页链接
headers = {
'Referer': url, #这一行和下一行为浏览器头部信息,主要为伪装浏览器,其中该行url为变量,内容为自己填的URL
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'}
r=requests.get(url,headers=headers) # r 为自定义变量名称,requests.get 为请求并返回(url)内容,headers为伪装头部引用
books=etree.HTML(r.text) #book 为自定义变量名称 etree.HTML为固定格式,改行主要为解析 r变量内内容
imgs=books.xpath('//*[@id="comic"]/@src') #imgs为自定义变量名称,book为上一行变量.xpath()为在book内定位括号内元素
print(imgs) #输出上一行变量,主要为查看是否按照想法输出图片链接
for img in imgs: #在imgs中查找img图片
file_ad ="C://Users//MSI//PycharmProjects//doutula//imgs//" # 存储位置
real_ad = file_ad + url.split('/')[-1] # 文件保存路径+ 从URL中截取最后一段为名字
with open(real_ad+'.jpg', 'wb')as fd: #因在url中截取的real_ad末尾并没有格式故在文件名后加入“.jpg”以添加固定格式
picture=requests.get(img,headers=headers) #图片请求因有反爬限制,故加入headers才能正常下载
fd.write(picture.content) #以二进制形式写入图片

整个简单实例完成,
说一下遇到的坑:
第一个就是定位元素,元素定位我用f12查找源代码在里面copy xpath 但是一度无法使用,只能自己摸索,最后查找xpath使用规则+看了几个别的实例才稍微明白怎么用。
第二个 就是保存文件名的方法,从url分割我觉得还是比较好用的,因为通常URL有一定的顺序,无论单一还是多个都比较好用。
第三个就是请求图片链接加入的 headers头部伪装信息,现在不少网站都有反爬机制,不伪装要么无法连接,要么下的图片有问题。
最后就是重中之重,python有对齐规则,写的时候一定要注意位置是否匹配对齐规则
记录回顾一下今天的一个小成果,能帮助到新手更好。
网友评论