在爬取百度搜索中的链接时,我们发现获取的链接都是经过百度加密过的,比如这样:
image.png
可以看到,获取的网址是这样的:
https://www.baidu.com/link?url=eMmgypP19LcmUtjiK4xRzPv0rl5y-BauEr3Nwxi5dzudQFmccUTLsYhbH5IPJiu5&wd=&eqid=ebae21c60001c462000000055c0a021f
观察上面的网址,发现结构可以分为3部分:
https://www.baidu.com/link? + url=***** + &wd=&eqid=ebae21c60001c462000000055c0a021f
第1部分是所有的百度搜索链接的头,第2部分是搜索结果的url加密部分,第3部分是搜索者id相关的数据,可以删除。删除第3部分后得到网址:
https://www.baidu.com/link?url=eMmgypP19LcmUtjiK4xRzPv0rl5y-BauEr3Nwxi5dzudQFmccUTLsYhbH5IPJiu5
上面这步很重要,如果带着第3部分去请求的话是得不到真实地址的
将得到的网址复制到浏览器地址栏,发现可以正常打开,下面就可以获取搜索结果的真实url了。
要获取真实网址其实很简单,只需要用到requests库,爬取一次该网址,然后通过返回的Response对象的url属性就可以获得真实的url了
import requests
url = 'https://www.baidu.com/link?url=eMmgypP19LcmUtjiK4xRzPv0rl5y-BauEr3Nwxi5dzudQFmccUTLsYhbH5IPJiu5'
r = requests.get(url)
print(r.url) #真实url
运行结果:
image.png
网友评论