需求:爬取国家药品监督总局中基于化妆品生产许可证的相关数据
http://scxk.nmpa.gov.cn:81/xk/
通过抓包分析:
首页中对应的企业信息数据是通过ajax动态请求得到的
点击进入企业的详情页,发现:
url的域名都是一样的,只有携带的参数(id)不一样
id 值可以从首页对应的ajax请求到的json串中获得
故:域名和id值可拼接一个完整的企业详情页的url
# -*-coding:utf-8 -*-
import requests
import json
if __name__ == '__main__':
# 获取不同企业的ID值
id_list = []
url = 'http://scxk.nmpa.gov.cn: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/88.0.4324.190 Safari/537.36'
}
for page in range(1, 6):
page = str(page)
data = {
'on': 'true',
'page': page,
'pageSize': '15',
'productName': '',
'conditionType': '1',
'applyname': '',
'applysn': ''
}
response = requests.post(url=url, data=data, headers=headers).json()
for dic in response['list']:
id_list.append(dic['ID'])
# 获取企业详细数据
post_url = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById'
fp = open('mes.txt', 'w', encoding='utf-8')
for id_data in id_list:
param = {'id': id_data}
response_data = requests.post(url=post_url, data=param, headers=headers).json()
for k, v in response_data.items(): # 以元组的形式分行打印
all_data = str((k, v))
fp.write(all_data+'\n')
fp.write("================================================================================\n")
print('over!!!!')
fp.close()