- 爬取药监总局中相关企业的详情信息 http://scxk.nmpa.gov.cn:81/xk/
- 需求分析
- 确定页面中相关数据是否为动态加载
- 通过抓包工具全局搜索定位到动态加载数据的数据包,提取到相关的url和请求参数
- 通过对比几家企业详情页的url,发现只有请求参数id值不同
- 可以使用同一个域名结合不同企业的id值拼接成企业详情页的url
- 进一步判断详情页的数据是否为动态加载的
- 发现数据依然是动态加载的
- 继续通过抓包工具定位数据包
# 爬取药监总局中相关企业的详情信息 http://scxk.nmpa.gov.cn:81/xk/
# 其中一页的ajax请求url,翻页: http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList
# 详情页url: http://scxk.nmpa.gov.cn:81/xk/itownet/portal/dzpz.jsp?id=ff83aff95c5541cdab5ca6e847514f88(没用上)
# 企业ajax详情数据url: http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById
# 爬取一页
import requests
num = int(input('请输入要采集的页面数:'))
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36'
}
url = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList'
for i in range(1,num+1):
print('正在爬取第{}页的数据......'.format(i))
# 进入界面
data = {
'on': 'true',
'page': str(i),
'pageSize': '15',
'productName': '',
'conditionType': '1',
'applyname': '',
'applysn':'',
}
companies_data = requests.post(url=url,headers=headers,data=data).json()
# 爬取具体企业的详情信息
msg_url = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById'
for company in companies_data['list']:
data = {
'id': company['ID']
}
msg_dic = requests.post(url=msg_url,headers=headers,data=data).json()
print(msg_dic['epsName'] + ':' + msg_dic['legalPerson'])