赞
踩
Author: Labyrinthine Leo
Init_time: 2021.02.16
Key Words: Spider
、requests库
公众号:Leo的博客城堡
需求:在上一节中,我们已经学会了使用requests
模块对搜狗搜索关键字信息页面进行爬取,这一节的目标是,分析异步加载页面,并通过关键字对百度翻译的结果进行爬取。涉及的知识点:ajax
异步加载、json
库的基本使用。
分析:
dog
时,无需点击确定就会出现对应的翻译结果,而我们需要爬取的信息即图2中红框的翻译信息,这就涉及到页面的源码内容解析。F12
快捷键,打开开发者模式,点击其中的Network
选项的XHR
选项,这个过程其实就是通过浏览器的开发者功能对请求访问数据进行抓包,这里的XHR
就是查看ajax
加载的页面数据,暂且知其然即可。然后在搜索栏中输入dog
关键字,就会发现出现数据的请求和响应(如下图所示)。Name
为sug
的请求信息,可以发现真正翻译获取的数据其实该链接请求响应的,其中的信息显示只是为二进制编码。而该链接https://fanyi.baidu.com/sug
和页面链接https://fanyi.baidu.com/#en/zh/dog
并不相同,从而可知,我们需要的翻译信息并不是通过页面链接响应的,而是通过异步加载进行渲染的,既然如此,我们只需对真正的数据链接进行请求即可。POST
请求,并且其中Form Data
(即post参数)中包含了一个kw: dog
的字典,而这个字典的value
正是我们输入的关键字,于是使用前几节讲到的POST
请求中的data
参数封装即可。# 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)
运行结果:
代码中需要注意的几个点,稍微解释一下:
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
也无妨呀,嘿嘿)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。