Hello,大家好呀,五一劳动节快乐呀!最近在后台接到一个粉丝的私信说怎么爬取百度快照。正好五一有一段时间休息,咱们就来水一篇文章,顺便来巩固巩固基础的知识。
注意注意!这是思路篇,没有代码!只有思路
代码篇地址:链接地址
提前预警,这可能是你看到的讲述最详细的一篇关于百度快照爬虫的博客,所以请务必认真看一下哟!由于我的水平有限,欢迎各位大神批评指正!
但是需要注意的是,我在这里演示的内容仅仅对我写完代码这一刻有效,爬虫的机制是一直会变化的,没有哪个爬虫的编写者能够肯定他们的代码一定不会失效,尤其是像百度这种大网站,经常更改规则是很正常的
我为大家准备了思路,这个思路的确花了我一段时间制作,我个人认为这个思路非常详细,小白也可以看不懂。如果真的在这个思路篇有问题的各位朋友,可以直接在博客下面留言,如果我看到了,会第一时间给大家解答。
事前准备
在开始前,我们首先要确保电脑中有Requests和BeautifulSoup4这两个基础抓包库。我们可以打开命令行窗口,输入命令pip install requests/BeautifulSoup4
。当出现Successfully installed的字样后,便证明安装成功
在这里我提醒一点,我使用的是Python3的编程环境,所以使用Python2在本篇文章运行的过程中可能会有一些小问题。加之Python2将要被弃用,所以在这里还是建议使用Python2的编程者尽量使用Python3 哟!
开始Codeing
思路分析
当我们开始一个爬虫程序的时候,我们可以从我们爬取的网站类型入手。先让大家看看百度网页快照长什么样子。我就直接把图片放在下面了。咱们用百度搜索“最遥远的天秤”为例
当然也不是所有的网页都有百度快照,比如这种官方的网页
咱们进一步研究可以简单的发现,这个百度快照,其实就是一个超链接,我们只要获取到这个超链接,就能够获取到百度快照了
所以咱们的最终目的就是获得这个网址
通过分析,咱们可以发现,我们只要获取页面中的一小部分可见的部分即可。咱么遇到这种情况,最简单的办法就是分析网页,然后用爬虫先访问网页,然后用BS4来转换和清洗内容,最终获得我们想要的百度快照链接。
获取超链接
咱们可以借助浏览器的开发者工具,在网页中分析,最终找到百度快照的地址。(使用Ctrl+Shift+I打开开发者工具)也可以按照下面的步骤打开
对于这种规则的网站来说,我们可以在网站中找到适当的规律,然后在根据相同的规律,让计算机批量化的完成问题。再提醒一次,我在这里演示的内容仅仅对我写完代码这一刻有效,爬虫的机制是一直会变化的,没有哪个爬虫的编写者能够肯定他们的代码一定不会失效,尤其是像百度这种大网站,经常更改规则是很正常的
接下来,我们就按照相关的代码一步一步的分析,就像下面的动图一样,我们按照浏览器给予的提示,最终找到在网页中的超链接地址,分析超链接地址的共同之处。
我把所有的包含快照的网页元素放在下面
对比上面这两个快照,我们可以发现,除了href这个参数不同之外,其他的像class aria-label都是相同的,这样我们就找到内在的规律了,接下来我们就可以编写爬虫了。
当我们把鼠标放在网络元素上,我们可以看到浏览器自动给出了元素的特性,咱们通过这样的方法多试验多个元素也是可以的
嗯嗯,咱们思路也就给大家梳理的差不多了。之前很多人看我的博客,都觉得我的博客问题比较严重,思路讲的太多了,很多代码上的东西又讲的很少。现在我决定先写一个思路篇,如果看完思路片的大佬们可以自己做出来,就不用看我的代码片了,因为和大佬的智慧相比,我的智商可真的是微乎其微;那么如果看完还是觉得有些疑惑的小伙伴们,也不用着急,我会在思路篇写完之后立马发出来一个代码篇,链接就会放在思路篇的下面。
先留一个空位,专门放思路篇地址的哈,或者大家可以在我的主页当中找到下一篇文章,大概会在5月2日发出来,谢谢大家哈!
代码篇文章:传送门
完整代码
为了让大家看完我的这篇博客而不是没有收获(因为我大概率知道大家来CSDN大多只是为了混一个代码抄一抄)所以我也把代码篇的完整代码放在这里了!
import requests
from bs4 import BeautifulSoup
#-------------------- 1.获取页面信息 -----------------------
headers = {
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.9999.0 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "en,es;q=0.9,ja;q=0.8,zh;q=0.7,zh-CN;q=0.6",
}
# 咱们在这里直接给定义一个关键词
key = "最遥远的天秤"
baiduweb = requests.get("https://www.baidu.com/s?wd=" + key,headers = headers)
baiduweb_text = baiduweb.text
#-------------------- 2.清洗页面信息 -----------------------
import json
# 使用BS4模块
baidu_soup = BeautifulSoup(baiduweb_text,"html.parser")
cache_link_list = []
for cache_link in baidu_soup.find_all(attrs = {"aria-label":"百度快照"}):
cache_link = cache_link["href"]
cache_link_list.append(cache_link)
cache_title_list = []
for cache_title in baidu_soup.find_all(attrs = {"class" : "c-tools tools_47szj"}):
dt = cache_title["data-tools"]
dt = dt.replace("'",'"')
dt = json.loads(dt)
title = dt.get("title")
cache_title_list.append(title)
#print(cache_link_list)
#print(cache_title_list)
all_list = zip(cache_title_list,cache_link_list)
print(list(all_list))