Python之爬虫入门教程( 二 )


按快捷键 F12,进入开发者模式,单击 Network,此时内容为空,如图 8 所示:

Python之爬虫入门教程

文章插图
图8
在有道翻译中输入“我爱中国”,单击“翻译”按钮,如图 9 所示:
Python之爬虫入门教程

文章插图
图9
在开发者模式中,依次单击“Network”按钮和“XHR”按钮,找到翻译数据,如图 10 所示:
Python之爬虫入门教程

文章插图
图10
单击 Headers,发现请求数据的方式为 POST 。如图 11 所示:
Python之爬虫入门教程

文章插图
图11
找到数据所在之处并且明确请求方式之后,接下来开始撰写爬虫 。
首先,将 Headers 中的 URL 复制出来,并赋值给 url,代码如下:
url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
POST 的请求获取数据的方式不同于 GET,POST 请求数据必须构建请求头才可以 。
Form Data 中的请求参数如图所示:
Python之爬虫入门教程

文章插图
图12
将其复制并构建一个新字典:
From_data=https://www.isolves.com/it/cxkf/yy/Python/2020-08-12/{'i':'我愛中國','from':'zh-CHS','to':'en','smartresult':'dict','client':'fanyideskweb','salt':'15477056211258','sign':'b3589f32c38bc9e3876a570b8a992604','ts':'1547705621125','bv':'b33a2f3f9d09bde064c9275bcb33d94e','doctype':'json','version':'2.1','keyfrom':'fanyi.web','action':'FY_BY_REALTIME','typoResult':'false'}
接下来使用 requests.post 方法请求表单数据,代码如下:
import requests #导入requests包response = requests.post(url,data=https://www.isolves.com/it/cxkf/yy/Python/2020-08-12/payload)
将字符串格式的数据转换成 JSON 格式数据,并根据数据结构,提取数据,并将翻译结果打印出来,代码如下:
import jsoncontent = json.loads(response.text)print(content['translateResult'][0][0]['tgt'])import jsoncontent = json.loads(response.text)print(content['translateResult'][0][0]['tgt'])使用 requests.post 方法抓取有道翻译结果的完整代码如下:
import requests#导入requests包import jsondef get_translate_date(word=None):url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'From_data=https://www.isolves.com/it/cxkf/yy/Python/2020-08-12/{'i':word,'from':'zh-CHS','to':'en','smartresult':'dict','client':'fanyideskweb','salt':'15477056211258','sign':'b3589f32c38bc9e3876a570b8a992604','ts':'1547705621125','bv':'b33a2f3f9d09bde064c9275bcb33d94e','doctype':'json','version':'2.1','keyfrom':'fanyi.web','action':'FY_BY_REALTIME','typoResult':'false'}#请求表单数据response = requests.post(url,data=From_data)#将Json格式字符串转字典content = json.loads(response.text)print(content)#打印翻译后的数据#print(content['translateResult'][0][0]['tgt'])if __name__=='__main__':get_translate_date('我爱中国')import requests#导入requests包import jsondef get_translate_date(word=None):url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'From_data=https://www.isolves.com/it/cxkf/yy/Python/2020-08-12/{'i':word,'from':'zh-CHS','to':'en','smartresult':'dict','client':'fanyideskweb','salt':'15477056211258','sign':'b3589f32c38bc9e3876a570b8a992604','ts':'1547705621125','bv':'b33a2f3f9d09bde064c9275bcb33d94e','doctype':'json','version':'2.1','keyfrom':'fanyi.web','action':'FY_BY_REALTIME','typoResult':'false'}#请求表单数据response = requests.post(url,data=From_data)#将Json格式字符串转字典content = json.loads(response.text)print(content)#打印翻译后的数据#print(content['translateResult'][0][0]['tgt'])if __name__=='__main__':get_translate_date('我爱中国')使用 Beautiful Soup 解析网页通过 requests 库已经可以抓到网页源码,接下来要从源码中找到并提取数据 。Beautiful Soup 是 python 的一个库,其最主要的功能是从网页中抓取数据 。Beautiful Soup 目前已经被移植到 bs4 库中,也就是说在导入 Beautiful Soup 时需要先安装 bs4 库 。
安装 bs4 库的方式如图 13 所示:
Python之爬虫入门教程

文章插图
图13
安装好 bs4 库以后,还需安装 lxml 库 。如果我们不安装 lxml 库,就会使用 Python 默认的解析器 。尽管 Beautiful Soup 既支持 Python 标准库中的 HTML 解析器又支持一些第三方解析器,但是 lxml 库具有功能更加强大、速度更快的特点,因此笔者推荐安装 lxml 库 。
安装 Python 第三方库后,输入下面的代码,即可开启 Beautiful Soup 之旅:


推荐阅读