失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Python爬虫 使用urllib的post请求百度翻译的详细翻译

Python爬虫 使用urllib的post请求百度翻译的详细翻译

时间:2023-12-09 16:48:41

相关推荐

Python爬虫 使用urllib的post请求百度翻译的详细翻译

本节课通过爬取百度翻译的详细翻译的数据为例对urllib中post进行讲解。

黄线处就是提供详细翻译的文件

先根据上一节的方法来试着爬取数据:

import urllib.requestimport urllib.parse# url是上图黄线处文件的Request URL:url = '/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 jsonobj = json.loads(content)print(obj)

输出结果:

可以发现,只能爬取部分数据,且会出现‘未知错误’。

所以我们需要在请求数据的过程中进行进一步反爬。

单单提供UA已经不足以成功请求数据,所以我们得多提供点信息:将Request Headers的所有数据都存放入headers字典中:

可以利用EditPlus快速给数据添加单引号:

修改完headers里的数据后,点击运行会报错:

需要utf-8

为了防止冲突,将headers里的‘Accept-Encoding’那行注释掉即可:

再次点击运行:

成功!

这时候可以思考下,那么一大串headers数据,究竟哪个才是起决定性作用的呢?

我们开始测试一下,将headers里的代码一行一行注释掉进行测试,看注释掉的那行影不影响运行结果:

最终发现,其它代码全部注释掉,仅保留Cookie,就能成功运行爬取数据。

所以,在爬取百度翻译详细数据的时候,Cookie才是起决定性因素的条件。

最终代码:

import urllib.requestimport urllib.parseurl = '/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 jsonobj = json.loads(content)print(obj)

所以,在爬取不同网站的过程中,不同网站所需headers条件可能不同,可能要UA,可能要Cookie,也可能要Referer等。

如果觉得《Python爬虫 使用urllib的post请求百度翻译的详细翻译》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。