赞
踩
先根据上一节的方法来试着爬取数据:
- import urllib.request
- import urllib.parse
-
- # url是上图黄线处文件的Request URL:
- url = 'https://fanyi.baidu.com/v2transapi?from=en&to=zh'
-
- headers = {
- 'User-Agent': '你的UA'
- }
-
- data = {
- 'from': 'en',
- 'to': 'zh',
- 'query': 'spide',
- 'transtype': 'realtime',
- 'simple_means_flag': '3',
- 'sign': '894007.608006',
- 'token': '7eab9fb613c8ee66bd7d8a8e7fd3f838',
- 'domain': 'common',
- }
-
- # post请求的参数必须要进行编码,并调用encode方法
- data = urllib.parse.urlencode(data).encode('utf-8')
-
- # 请求对象的定制
- request = urllib.request.Request(url=url, data=data, headers=headers)
-
- # 模拟浏览器向服务器发送请求
- response = urllib.request.urlopen(request)
-
- # 获取响应的数据
- content = response.read().decode('utf-8')
-
- import json
-
- obj = json.loads(content)
- print(obj)

输出结果:
可以发现,只能爬取部分数据,且会出现‘未知错误’ 。
所以我们需要在请求数据的过程中进行进一步反爬。
单单提供UA已经不足以成功请求数据,所以我们得多提供点信息:将Request Headers的所有数据都存放入headers字典中:
可以利用EditPlus快速给数据添加单引号:
修改完headers里的数据后,点击运行会报错:
为了防止冲突,将headers里的‘Accept-Encoding’那行注释掉即可:
再次点击运行:
成功!
这时候可以思考下,那么一大串headers数据,究竟哪个才是起决定性作用的呢?
我们开始测试一下,将headers里的代码一行一行注释掉进行测试,看注释掉的那行影不影响运行结果:
最终发现,其它代码全部注释掉,仅保留Cookie,就能成功运行爬取数据。
所以,在爬取百度翻译详细数据的时候,Cookie才是起决定性因素的条件。
最终代码:
- import urllib.request
- import urllib.parse
-
- url = 'https://fanyi.baidu.com/v2transapi?from=en&to=zh'
-
- headers = {
- 'Cookie': '你的Cookie',
- }
-
- data = {
- 'from': 'en',
- 'to': 'zh',
- 'query': 'spide',
- 'transtype': 'realtime',
- 'simple_means_flag': '3',
- 'sign': '894007.608006',
- 'token': '7eab9fb613c8ee66bd7d8a8e7fd3f838',
- 'domain': 'common',
- }
-
- # post请求的参数必须要进行编码,并调用encode方法
- data = urllib.parse.urlencode(data).encode('utf-8')
-
- # 请求对象的定制
- request = urllib.request.Request(url=url, data=data, headers=headers)
-
- # 模拟浏览器向服务器发送请求
- response = urllib.request.urlopen(request)
-
- # 获取响应的数据
- content = response.read().decode('utf-8')
-
- import json
-
- obj = json.loads(content)
- print(obj)
-

所以,在爬取不同网站的过程中,不同网站所需headers条件可能不同,可能要UA,可能要Cookie,也可能要Referer等。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。