爬取药监总局中相关企业的详情信息
作者:互联网
- 需求
- 爬取药监总局中相关企业的详情信息http://125.35.6.84:81/xk/
- 需求分析
- 确定页面中企业相关数据是否为动态加载?
- 相关的企业信息是动态加载出来的
- 通过抓包工具实现全局搜索,定位动态加载数据对应的数据包!
- post:http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList
- 该请求返回的响应数据是一组json串,通过对json串的一个简单分析,没有找到企业详情页的url,但是找到个每一家企业的id
- 每一家企业详情页的url,域名都是一样的,只有请求参数id值不同
- 可以使用同一个域名结合着不同企业的id值拼接成一家完整企业详情页url
- 判断企业详情页中的数据是否为动态加载?
- 通过抓包工具检测,发现企业详情信息在详情页中为动态加载的数据
- 通过抓包工具实现全局搜索定位动态加载数据对应的数据包
- post-url:http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById
- 请求参数:id=xxxxx
- 请求到的json串就是我们最终想要的企业详情信息数据
- post-url:http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById
- 确定页面中企业相关数据是否为动态加载?
import requests
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
}
#获取每一家企业的id
url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList'
for page in range(1,6):
print('正在爬取第{}页的数据......'.format(page))
data = {
'on': 'true',
'page': str(page),
'pageSize': '15',
'productName': '',
'conditionType': '1',
'applyname': '',
'applysn':'',
}
company_data = requests.post(url,headers=headers,data=data).json()
for dic in company_data['list']:
_id = dic['ID']
detail_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'
data = {
'id':_id
}
detail_data = requests.post(url=detail_url,data=data,headers=headers).json()
print(detail_data['epsName'],detail_data['legalPerson'])
- 如何检测页面中是否存在动态加载的数据?
- 基于抓包工具实现
- 先捕获网站请求后所有的数据包
- 在数据包中定位到地址栏所对应请求的数据包,在response选项卡对应的数据中进行局部搜索(页面中的某一组内容)
- 可以搜索到:爬取的数据不是动态加载的
- 没有搜索到:爬取的数据是动态加载的
- 如何定位动态加载的数据在哪个数据包中呢?
- 进行全局搜索
- 基于抓包工具实现
标签:url,数据包,取药,总局,详情,动态,data,id,加载 来源: https://www.cnblogs.com/5kuishoua666/p/12021683.html