Python爬取网页动态加载数据实例讲解(ajax请求)
笔者之前在慕课学习Python网络爬虫与信息提取时,老师并未讲解如何爬取网页的动态加载数据,之后通过观看其他教学视频学会了如何爬取网页动态数据,下面用一个实例来记录一下爬取动态网页的步骤。实例:爬取药监总局中的企业详情数据url:http://125.35.6.84:81/xk/需求:将首页中每一家企业的详情数据进行爬取。总共爬取前5页企业的数据。首页:详情页:分析...
笔者之前在慕课学习Python网络爬虫与信息提取时,老师并未讲解如何爬取网页的动态加载数据,之后通过观看其他教学视频学会了如何爬取网页动态数据,下面用一个实例来记录一下爬取动态网页的步骤。
实例:爬取药监总局中的企业详情数据
url:http://125.35.6.84:81/xk/
需求:
-
将首页中每一家企业的详情数据进行爬取。
-
总共爬取前5页企业的数据。
首页:
详情页:
分析:
首先我们在详情页点击右键检查打开开发者工具,在全局搜索框内输入企业名称进行搜索,如下图所示:
此时已经成功定位到动态加载数据对应的数据包,点击Headers,查看请求携带的参数,发现需要一个名为ID的参数:
复制这个id的值,回到首页打开开发者工具,在全局搜索框内输入id值,就可以定位到包含id信息的动态加载数据包:
在Headers里提取出请求的url、请求方式和请求携带的参数:
编写代码利用Request库,获得该url的响应数据:
import requests
url = "http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList"
headers = {
'User_Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}
data = {
'on': 'true',
'page': '1', # 该参数指定爬取第几页,这里先爬取第一页
'pageSize': '15',
'productName': '',
'conditionType': '1',
'applyname': '',
'applysn': ''
}
response = requests.post(url=url, headers=headers, data=data)
page_text = response.json()
用JSON解析器解析Response信息:
可以看到id信息被存储在list关键字下的ID关键字内,利用for循环获取所有的ID值,接着查看详情页的动态数据包的请求url和请求方式:
结合之前获取的id信息就可以获得该url的响应数据:
for dic in page_text['list']:
ID = dic['ID']
url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'
data = {'id': ID}
response = requests.post(url=url, headers=headers, data=data)
dict = response.json()
最后用JSON解析器解析Reponse信息,将需要的信息提取出来打印即可。
完整程序代码:
import requests
headers = {
'User_Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}
for i in range(1, 6): # 为了提取前5页的企业信息,需要添加一个for循环
url = "http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList"
data = {
'on': 'true',
'page': str(i),
'pageSize': '15',
'productName': '',
'conditionType': '1',
'applyname': '',
'applysn': ''
}
response = requests.post(url=url, headers=headers, data=data)
page_text = response.json()
for dic in page_text['list']:
ID = dic['ID']
url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'
data = {'id': ID}
response = requests.post(url=url, headers=headers, data=data)
dict = response.json()
name = dict['epsName']
product = dict['productSn']
address = dict['epsAddress']
proAddr = dict['epsProductAddress']
print(name, product, address, proAddr)
这里只提取了详情页的企业名称、许可证编号、企业住所和生产地址,可以根据需要提取更多的信息。
程序运行结果:
更多推荐
所有评论(0)