当前位置:   article > 正文

爬虫入门—requests模块基础之百度翻译信息爬取_requets爬虫百度翻译结果

requets爬虫百度翻译结果

爬虫入门—requests模块基础之百度翻译信息爬取


Author: Labyrinthine Leo   Init_time: 2021.02.16


Key Words: Spiderrequests库


公众号:Leo的博客城堡

Leo


head.png


1、需求分析

需求:在上一节中,我们已经学会了使用requests模块对搜狗搜索关键字信息页面进行爬取,这一节的目标是,分析异步加载页面,并通过关键字对百度翻译的结果进行爬取。涉及的知识点:ajax异步加载、json库的基本使用。

分析

  1. 如下图1所示,为百度翻译的首页,当我们在文本框中输入dog时,无需点击确定就会出现对应的翻译结果,而我们需要爬取的信息即图2中红框的翻译信息,这就涉及到页面的源码内容解析。

00.png

01.png

  1. 于是,我们单击F12快捷键,打开开发者模式,点击其中的Network选项的XHR选项,这个过程其实就是通过浏览器的开发者功能对请求访问数据进行抓包,这里的XHR就是查看ajax加载的页面数据,暂且知其然即可。然后在搜索栏中输入dog关键字,就会发现出现数据的请求和响应(如下图所示)。

02.png

  1. 点开其中Namesug的请求信息,可以发现真正翻译获取的数据其实该链接请求响应的,其中的信息显示只是为二进制编码。而该链接https://fanyi.baidu.com/sug和页面链接https://fanyi.baidu.com/#en/zh/dog并不相同,从而可知,我们需要的翻译信息并不是通过页面链接响应的,而是通过异步加载进行渲染的,既然如此,我们只需对真正的数据链接进行请求即可。

03.png

04.png

  1. 由上图可以发现,该请求为POST请求,并且其中Form Data(即post参数)中包含了一个kw: dog的字典,而这个字典的value正是我们输入的关键字,于是使用前几节讲到的POST请求中的data参数封装即可。
  2. 基础的流程已经分析清楚,接下来便可动手编码了。
2、编码
# coding  : utf-8
# fun     : 爬取百度翻译信息:ajax信息自动加载,抓取json信息(页面url未发生变化则为ajax请求)
# @Author : Labyrinthine Leo
# @Time   : 2021.01.30

import requests
import json

def baidu_spider(url=None, keyword='leo'):
    """
    根据关键字爬取百度翻译信息
    :param url: url链接
    :param keyword: 关键字
    :return:
    """
    if url is None:
        print("url should not be None!")
        return
    # 1.指定链接
    url = url
    # 2.UA伪装
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36'
    }
    # 3.POST参数设置
    params = {
        'kw':keyword
    }
    # 4.发送请求
    response = requests.post(url=url, data=params, headers=headers)
    # 5.获取响应的信息
    dict_obj = response.json()
    # 6.持久化存储
    fileName = keyword + '.json'
    fp = open(fileName, 'w', encoding='utf-8')
    json.dump(dict_obj, fp=fp, ensure_ascii=False)
    fp.close()
    print("翻译结果: ", dict_obj["data"])
    print("{} 翻译结果抓取成功!".format(keyword))

if __name__ == '__main__':
    # 指定url
    url =  "https://fanyi.baidu.com/sug"
    # 输入需要翻译的关键字
    keyword = input("enter your want to translate key word:")
    # 爬取百度翻译信息
    baidu_spider(url, keyword)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

运行结果:

05.png

06.png

3、注意点

代码中需要注意的几个点,稍微解释一下:

  • 由于该POST请求中含有用户搜索的关键字信息的参数,因此需要使用字典对其封装,并作为data参数传入post方法中。
  • 由于response响应数据格式为json格式,因此我们需要使用response.json()方法获取响应数据(前几节说过:content表示二进制内容、text表示文本内容、json表示json格式数据)。同时在存储json数据时,需要使用json模块中的dump将响应数据转为json对象,并存入文件。

临渊羡鱼不如退而结网
创作不易,如果您觉得这篇文章对你有用,可以点个赞,算是对笔者的支持和激励!这里是Leo的博客城堡,以Python为核,ML&DL为主,泛之形形色色,输寥寥拙见,摄浮光掠影,讲三两故事。临渊羡鱼,不如退而结网,持续干货输出,有趣的灵魂值得你的关注!
原文可以去笔者的github主页:https://github.com/LabyrinthineLeo/Yxs_Git_Learning_repos查看(如果可以,点个star也无妨呀,嘿嘿)。


Leo的博客城堡


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

闽ICP备14008679号