当前位置:   article > 正文

Python爬虫 使用urllib的post请求百度翻译的详细翻译_处理 post 请求的方法,利用百度翻译网站查询某个单词的含义。

处理 post 请求的方法,利用百度翻译网站查询某个单词的含义。

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

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

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

  1. import urllib.request
  2. import urllib.parse
  3. # url是上图黄线处文件的Request URL:
  4. url = 'https://fanyi.baidu.com/v2transapi?from=en&to=zh'
  5. headers = {
  6. 'User-Agent': '你的UA'
  7. }
  8. data = {
  9. 'from': 'en',
  10. 'to': 'zh',
  11. 'query': 'spide',
  12. 'transtype': 'realtime',
  13. 'simple_means_flag': '3',
  14. 'sign': '894007.608006',
  15. 'token': '7eab9fb613c8ee66bd7d8a8e7fd3f838',
  16. 'domain': 'common',
  17. }
  18. # post请求的参数必须要进行编码,并调用encode方法
  19. data = urllib.parse.urlencode(data).encode('utf-8')
  20. # 请求对象的定制
  21. request = urllib.request.Request(url=url, data=data, headers=headers)
  22. # 模拟浏览器向服务器发送请求
  23. response = urllib.request.urlopen(request)
  24. # 获取响应的数据
  25. content = response.read().decode('utf-8')
  26. import json
  27. obj = json.loads(content)
  28. print(obj)

        输出结果:

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

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

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

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

 ↓

 

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

需要utf-8

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

         再次点击运行:

        成功! 

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

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

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

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

                

        最终代码:

  1. import urllib.request
  2. import urllib.parse
  3. url = 'https://fanyi.baidu.com/v2transapi?from=en&to=zh'
  4. headers = {
  5. 'Cookie': '你的Cookie',
  6. }
  7. data = {
  8. 'from': 'en',
  9. 'to': 'zh',
  10. 'query': 'spide',
  11. 'transtype': 'realtime',
  12. 'simple_means_flag': '3',
  13. 'sign': '894007.608006',
  14. 'token': '7eab9fb613c8ee66bd7d8a8e7fd3f838',
  15. 'domain': 'common',
  16. }
  17. # post请求的参数必须要进行编码,并调用encode方法
  18. data = urllib.parse.urlencode(data).encode('utf-8')
  19. # 请求对象的定制
  20. request = urllib.request.Request(url=url, data=data, headers=headers)
  21. # 模拟浏览器向服务器发送请求
  22. response = urllib.request.urlopen(request)
  23. # 获取响应的数据
  24. content = response.read().decode('utf-8')
  25. import json
  26. obj = json.loads(content)
  27. print(obj)

        

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/352840
推荐阅读
相关标签
  

闽ICP备14008679号