这个项目是我自己想做的,我并没有自行去看其他人的博客,只是单纯有这个想法.
注:本文使用的模块不多,思路也很简单.几乎都是链式爬取的,也可以叫做是深度爬取,即是一个链接接着下一个链接!
等你们看完代码,你们都会惊讶,这么简单!!!!
哈哈,是的!!
废话不多说,直接上步骤!
1.毫不迟疑就是分析网站的结构啦:
首先点进去打开首页,点进去第一个套图的网址,
发现,第一张图片的链接是:http://www.mzitu.com/130071,而最后一张是http://www.mzitu.com/130071/49
显然是以http://www.mzitu.com/130071就是图片合集的下标0了!找到这个就好办了,我们再次分析图片的结尾下标!结尾下标是:http://www.mzitu.com/130071/49,一共50张!
然后在去分析下一组这个url,发现一个更大的惊喜.
它的链接是:http://www.mzitu.com/130023,而对应首页上的第二个套图链接!
分析完这个就好办了,那么我现在有思路了
说下,首先,这个网站的链接分布类似于火车节的那种,只要你找到头,就能通过头一直查找下去,直到网站的底部.
思路:
1.打开一个套图的URL(头),解析出这个网页内部的img图片地址,下载这个img图片.
2.让其寻找下一页的url!再次打开,下载,再次寻找下一页的url....以此类推!直到找到网站的底部位置!
但是问题来了,该怎么去实现呢?
来一串伪代码:
def Get_thelink_and_next_link(url):
打开url,获取网页呈现后的结果.
解析出三个重要信息:
1.这个页面的妹子图链接.
2.下一页的妹子图链接.
3.解析出妹子图的名称(这个在存储有用.)
下载 妹子图片链接
存储到本地 记得把妹子图的名称加上.
一直重复
那么开始!!!
首先导入我们所需要的库文件.
我这里是通过requests这个第三方库来实现这个代码.
import requests#打开网页,进行下载时所用
import re#解析时用
from requests.exceptions import ConnectionError,HTTPError#捕捉错误
我们定义了函数,get_links_img()
里面的功能包括,打开网页并且解析出刚才说的三个重要的信息.
图片的链接
该页面的下一页
妹子图的名称
我这里是完全通过re模块来去解析的.然后注意下那个Splite(),这个函数就是解析下一页的url里面带上的双引号""!
解析过后便是提示和下载图片
我们在这用requests.get()打开刚刚解析出的图片链接,然后获取这个图片链接的二进制.
通过文件读写的方式写入到本地.
自此,整个函数的功能执行差不多执行完毕.
还差最最关键的一步,就是返回已经解析好的下一页的链接.
为什么要返回?
因为返回才能执行爬取下一页的功能!
有很多人可能想到我这样的代码结构,会用递归函数去实现爬取.
这里我得夸你,真的,你能想到递归,就意味着你能想到比递归更好的解决这个函数运行的方法.
我一开始就是使用递归,然后程序越跑越慢,执行效率极其低下.
然而,互联网是多么得伟大,我尝试去查找解决方案.终于让我找到了.
看图!
现在知道为什么要返回下一页的链接了吧.
简单解析下:
url = 链接
while url:#如果url能用,那么我就传入到下面那个函数
url = get_links_and_img(url)
get_links_and_img()返回的这个url是能用的,我就在再次传入到get_links_and_img(),如果不能用就直接停止.
然后运行结果...
怎么样?是不是很简单?
了了70行代码,一个非常简单的爬虫就完成了..
其实爬虫学的不是方法,而是思路.我个人认为,一个网站怎样爬取,不是看你怎么爬,而是看这个网站的布局.根据网站的布局来进行代码编辑.
爬虫怎么去学才能学好?
我个人给出的观点是:与其在那看视频学习,不如自己去实践一番.动手才是王道.
如果你也喜欢爬虫,如果你也喜欢技术,那么欢迎你加入我们的群,我们欢迎热爱技术的你
群号码:749511386
谢谢支持!!