爬虫使用百度翻译(代码与爬取教程)

打开百度翻译,我们写入单词时,可以看到页面右侧翻译和下面解释部分自动局部刷新。即,使用到了ajax。
通过浏览器检查,打开network,选择XHR(xhr,全称为XMLHttpRequest,用于与服务器交互数据,是ajax功能实现所依赖的对象,jquery中的ajax就是对 xhr的封装。)过滤到ajax请求的内容。
但是这些请求好像也有好几个。那么我们如何辨识那个请求是我们想要的翻译与释义呢。可以多输入几次单词,然后观察有哪些请求。当然也可以
一个个点击查看请求与响应分析。如图所示:
爬虫使用百度翻译(代码与爬取教程)_第1张图片

我们可以看到他的url和内容格式(content-type)为json格式。这个我们下面需要使用到。
可以看到我们输入的词多,sug多,可能sug这个就是我们要请求的地址,然后我们点进去查看,它是post请求,所携带的参数form-data即kw-human。再看响应内容,是多个键值对,与解释内容只有中文编码区别。那么基本可以确定这就是我们想要爬取的内容了。将该网站爬虫使用百度翻译(代码与爬取教程)_第2张图片
爬虫使用百度翻译(代码与爬取教程)_第3张图片
好了,话不多说,直接上代码和注释

#我们可以看到录入数据时页面局部刷新,即发送ajax请求。
#定位到XHR即为ajax请求包。在根据form-data来观察携带参数与我们输入的值相同的参数,再观察response可以看到所响应回来的数据
"""
post请求(携带了参数)响应数据是一组json数据
"""
import requests
import json
if  __name__ == "__main__":
    #1指定url
    post_url = 'https://fanyi.baidu.com/sug'
    #2进行ua伪装。浏览器请求头中
    headers={
     
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36 Edg/86.0.622.38'
    }
    #3post请求参数处理
    word = input('enter a word:')  #可以通过输入字符获取翻译结果
    data={
     
        'kw': word
    }
    #4发送请求
    response=requests.post(url=post_url,data=data,headers=headers)
    #5获取响应数据,json()方法返回的是obj(如果确认响应数据是json类型的才可以用json返回
    dic_obj=response.json()
    print(dic_obj)

    #6进行持久化存储
    fp=open('./computer.json','w',encoding='utf-8')
    json.dump(dic_obj,fp=fp,ensure_ascii=False)  #有中文因此不能使用ascii进行编码


运行结果:
爬虫使用百度翻译(代码与爬取教程)_第4张图片
如仍有疑问,可以参考该视频

你可能感兴趣的:(爬虫)