当前位置:   article > 正文

Python爬虫练手示例——爬取百度翻译结果

Python爬虫练手示例——爬取百度翻译结果

一、关于用爬虫爬取想要的信息我们必须要明确一些主要步骤:

  1. 通过浏览器的开发者工具获取一些抓包工具找到目标URL(API接口);
  2. 分析普通的GET/POST请求还是Ajax型GET/POST请求;
  3. 选择合适的库进行爬取;
  4. 选择合适的库解析爬取的页面提取自己想要的结果,常见的有:正则表达式、xpath、BeautifulSoup等;

 

二、前期知识准备:

本次示例使用库是urllib库,不懂的可以参考之前的教程https://blog.csdn.net/CurtainOfNight/article/details/103330307 ;

 

  1. Python的Json库:
    1. dumps() 方法:将 Python 对象编码成 JSON 字符串。
json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

参数介绍:

(1)ensure_ascii 参数:默认为True, 如果被设置为False, 则可以返回non-ASCII的字符串。

  1. json_data = json.dumps(data_dict)
  2. print(json_data) # {"name": "\u94b1\u7a0b", "shares": 100, "price": 542.23}
  3. json_data = json.dumps(data_dict, ensure_ascii=False)
  4. print(json_data) # {"name": "钱程", "shares": 100, "price": 542.23}

 (2)sort_keys 参数:默认为False,如果设置为True,则输出的字典会按照key的字典序升序排列。

  1. json_data = json.dumps(data_dict, ensure_ascii=False, sort_keys=True)
  2. print(json_data)

            2. dump() 方法:用于写文件。

  1. with open("json_dump_test.json", "w") as f:
  2. json.dump(data_dict, f, ensure_ascii=False)

           3. loads() 方法:将已编码的 JSON 字符串解码为 Python 对象。 

  1. json_data = json.dumps(data_dict, ensure_ascii=False, sort_keys=True)
  2. print(json_data)
  3. print(json.loads(json_data))

           4. load() 方法:对应dump()方法

  1. with open("json_dump_test.json", "r") as f:
  2. json_data = json.load(f)
  3. print(json_data)

          5. json 库支持下面这些类型转化为 json 的数据类型:

Python 类型Json 类型
dictobject
list, tuplearray
int, float number
Truetrue
Falsefalse
Nonenull

 

三、爬取百度翻译结果:

1. 首先分析一下百度翻译的页面,我们会发现当我们在输入框中输入要查询的单词时,整个主页面并没有发生变化,这时我们应该想到应该用到了ajax的异步传输方法!

                                                 

2.  我们现在已经知道百度翻译用的ajax的POST请求,那么下一步我们就要利用抓包工具分析出它向那个API接口发出的请求,由于不是很复杂我们就用Chrome浏览器的开发者工具就行了F12打开开发者工具,由于是ajax的异步传输所有我们只看XHR就行了(至于为什么大家可以去百度一下ajax的工作原理,这里小编将不再赘述了!)

我们查看第一个文件,看看它的返回结果这好就是我们要结果,那么我们直接从headers找到它的API接口就行了,大家可以看看第三个文件的返回结果也是我们想要的而且更加详细,大家自己可以尝试一下!

3. 找到API接口后,由于是POST请求所以我们还要知道要提交表单的参数,我们可以从headers的最底下看到要的参数是什么

 4. 好了,现在我们的API和参数都找到了,接下来我们就可以写代码了!

  1. import urllib.request
  2. import urllib.parse
  3. import json
  4. # 百度翻译的API接口
  5. url = "https://fanyi.baidu.com/sug"
  6. word = input("请输入要查询的单词:")
  7. headers = {
  8. 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 '
  9. '(KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
  10. }
  11. # 要加的参数
  12. data = {
  13. 'kw': word,
  14. }
  15. data = urllib.parse.urlencode(data).encode()
  16. request = urllib.request.Request(url=url, headers=headers, data=data)
  17. response = urllib.request.urlopen(request).read().decode('unicode_escape')
  18. # 用Json模块把得到的json数据(其实它就是一种str字符串)转成Python中字典
  19. response = json.loads(response)['data']
  20. for word in response:
  21. print(word['k'] + ':' + word['v'])

结果:


                                            

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

闽ICP备14008679号