Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说Python爬虫-爬取网红套图,希望能够帮助你!!!。
久闻Python大名,作为一个工作四年的Javaer决定试试这个宇宙第一语言。找了点资料花了半天看完了基础,果然简单。小白的话建议找视频看,有开发语言基础的还是找文档看会比较快。废话不多说,写爬虫是PY的强项。正好在看直播,就决定是你了,皮卡丘,爬套图。
安装了环境和PyCharm。在gitee上找了个爬虫的例子,又找到一个套图网站。试了一下这网站响应速度还挺快的。
打开pycharm,新建meitulu_spider.py
首先import包,主要是os,request,BeautifulSoup
这三个简单介绍一下他们作用
os 文件操作,request 建立请求,获取页面响应,bs4 解析获取到页面,方便处理。
ok,开始。建立请求需要请求头header,这里面越多越好,后面随机取一个用来访问网站
定义其他参数
创建文件夹的方法
点开套图,F12,查看页面。
看到每张图片的url了吗,这就是我们要的
可以看出图片的url 是拥有class="content_img"的元素的src属性获取元素content_imgs = soup.select('img[class="content_img"]')循环get到src属性即可
使用网站的套图item当作文件夹名称一套图有多页,每页有多张图,每张图的名称使用 页码+下划线+图片名的方式命名,图片名就是图片url最后一个’/‘的后面部分。
有了这些就可以下载图片了
我这写了三种方法,其实是三种写法。本质上都是访问图片地址,将响应写入到本地。
现在问题是如何自动获取下一页并下载
分析页面后,发现class=‘a1’这个属性只有上一页和下一页两个有。那就是说拥有a1属性的第二个元素就是下一页。next_page = soup.select('a[class="a1"]')[1].get("href")这就可以获得下一页的访问地址。
点击最后一页,可以看到他的下一页地址是他自己所以写个递归
if 满足条件(下一页页码小于当前页码)
调用自己,下载下一页的图片
else
该套图爬取结束
点开模特主页,这么多一套一套的下载太慢了。重复的复制粘贴没什么意思,所以提升效率
打开后可以看到图册路径
一样的方式,拥有img属性的ul作为开始,他的子元素li里面都是一套图的信息,模特,标签,一些备注,拍摄时间什么的,这都不重要,我只关注图片...所以我只要li下第一个a标签的href属性。其实只要item就够了
整体流程:输入网站中刘飞儿主页地址-分析得到所有套图的item地址-打开item地址-获取本页的图片和下一页地址-自动下载下一页直到结束。
提升效率后的结果:
1.没有设置代理 虽然添加了不少headers,可以模拟不同的浏览器或者设备访问网站,但是ip是一样的。(但这个网站好像没做ip的相关拦截)
2.没有设置延迟时间 都是即使访问,对网络和网站响应速度稍有要求。(这网站速度挺快的,懒得搞了)
3.没有加入多线程 一次下载全部套图的时候,执行时间会稍微长一些。(我觉得可以接受,本来就是写着玩的)
我以前也写过类似的爬虫,当时用java JSoup写的。和python比起来确实麻烦一些。python优势是有很多好用的包,拿来就可以用。。后面慢慢学习
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。