哈喽,大家好,我是小爬虫,上一节我们讲了requests库的使用,没有学习过的同学可以关注专栏进行学习。今天我们再次使用requests来实现一个案例:爬取百度翻译。
百度翻译接口分析
首先我们分析一下百度翻译怎么抓取,先在百度翻译页面随意输入一个关键字‘cat’进行翻译,可以看到翻译结果在下面显示了。
接下来我们鼠标右键打开网页源代码,搜索一下网页源代码中是否含有翻译结果。
很明显,源代码中并没有翻译结果。于是我们应该想到,翻译结果并不是存放在html源代码中返回的,而是通过js网络请求返回的。鼠标右键点击检查,进入浏览器调试工具,定位到Network,重新输入关键字‘cat’查看js做了哪些网络请求。通过观察发现其中一个请求就是我们想要找的。
进入Headers查看其request的url和方法发现url是:
https://fanyi.baidu.com/sug
请求方法是POST请求。
再进入Payload页面找到POST请求的data参数,发现是如下格式,其中kw就是对应的key,‘cat’就是我们要搜索的关键字。
{
kw: 'cat'
}
我们进入Preview下面观察这个请求返回的结果,可以看到返回的是一个json格式的数据,其中我们需要的结果是data,这是一个列表,每一个item里面的k和v就是单词对应的翻译结果,这正是我们需要的。
实现百度翻译的爬取
经过以上分析,我们找到了我们应该请求的url,请求的方法是POST,还有POST请求应该携带的data参数的格式,以及请求返回的数据格式。接下来我们就利用我们上一节所讲到的requests发送POST请求的方法来实现,我们很容易写出如下代码
import requests
url = "https://fanyi.baidu.com/sug"
data = {
"kw": "cat"
}
resp = requests.post(url, data=data)
data_list = resp.json()['data']
for item in data_list:
print(f"{item['k']}: {item['v']}")
运行观察打印的结果,可以看到打印出来了我们需要的翻译内容。
当然我们可以把POST请求data里面需要翻译的kw,换成如下的写法,这样就可以实现我们输入一个任意关键字,都可以返回我们需要的结果,这样就实现了一个交互式的翻译爬虫。
data = {
"kw": input("请输入需要翻译的关键字:")
}
本节的实践就到这里,接下来我们将会写一个爬虫来爬取豆瓣的页面,敬请期待。记得关注小爬哦~
本文首发于公众号:小爬虫,欢迎关注
|