当前位置: 首页 > 后端技术 > Python

基于cookie爬虫-Pixabay高清图片爬取

时间:2023-03-26 17:43:18 Python

前言因为公众号每次都需要图片进行群发,但是一张一张下载实在是太傻了,于是想到了用爬虫爬取。这篇文章的目的是总结下简单的爬取步骤,加深自己的印象。如有表达不准确的地方,请指出,共同学习。本文爬虫使用python语言基于cookies进行爬取,爬取的图片来自pixabay网站。爬虫Step1.目的:首先,爬虫的目标是什么?因为公众号规定最大上传图片在5M以内,所以我的目标是范围内最高分辨率的图片。2.起始url:接下来,你要指定你爬取的起始链接,也就是你一开始请求的网页。这个网页应该有你想要的。我选择了pixabay的搜索页面https://pixabay.com/zh/images/search/,其内容如下:这个页面的图片就是我们要的。然后发现这个页面有一个下一页按钮,我可以松一口气了,幸好不是动态加载页面,点击下一页,观察url的变化,可以发现第二页的url结束更多?pagi=2,多验证几个,可以得出起始页是https://pixabay.com/zh/images/search/?pagi=1,改变最后一个数字可以实现切换页面的功能。3、分析页面信息,右键勾选进入开发者模式。最上面需要注意element和network,其中element是请求url后响应的文本内容,network是请求url后的加载过程。可以查看具体的请求头和响应头以及其他参数。先选中任意一张图片,右键查看,如下:可以发现里面有很多链接,随便打开一张都是这张图片,只是大小不一样。显然,这些图片是缩略图。如果对图片分辨率没有要求,我们可以只抓取这些链接,直接下载。但我的目标是高质量图片,所以我需要不断寻找高质量图片的链接。点击一张图片,重复上面的过程,发现这张图片只是分辨率高了一点,不符合要求。4、整理思路:(1)请求初始base_url,获取img字段中的图片名称;(2)将获取的名字组合成一个完整的链接download_url;https://pixabay.com/zh/images/download/imgname.jpg;(3)请求上述连接,并下载响应内容;(4)修改起始url中的页数,重复2-3步实现1.请求起始url,获取图片名称:importre#正则表达式importrequests#Requesturlfromlxmlimportetree#解析initialurltextcontent#get请求初始链接,并返回文本内容html=requests.get(base_url).text#分析文本内容tree=etree.HTML(html)#提取缩略图链接,我选择了data-lazyfieldimg_name=tree.xpath('//img/@data-lazy')#提取图片名称形成高分辨率图片链接img_url=[]#月-日-时-分,正则表达式匹配,只保留图片名称reg=re.compile(r"/[0-9]{2}/[0-9]{2}/[0-9]{2}/[0-9]{2}/(.*)__")#Thisisalinktoapageallpicturesforiinimg_name:name=re.findall(reg,i)#提取名称,名称为A列表#高分辨率图片链接的组合,如果你不加1920,可以得到原图,一般在5M以上img_url.append(download_url+name[0]+"_1920.jpg")2.请求下载url和响应下载内容:#保存路径img_path=img_root+name+".jpg"#请求高清图片img=requests.get(download_url)#下载响应内容。下载其实就是一个write操作withopen(img_path,'wb')asf:f.write(img.content)3.循环请求:把上面两个模块放到for循环中,就可以了。问题分析以上基本是一个简单的爬虫结构,既没有模拟登录也没有模拟动态请求。