requests应用之国家药监局

需求:爬取国家药品监督总局中基于中华人民共和国化妆品生产许可证相关数据

url:http://scxk.nmpa.gov.cn:81/xk
首页中对应的企业数据是通过ajax请求得到的。

任取一个企业点开它的超链接: http://scxk.nmpa.gov.cn:81/xk/itownet/portal/dzpz.jsp?id=ed59438f34ae47e794f4c7ee5137c1f7

再任取一个企业:
http://scxk.nmpa.gov.cn:81/xk/itownet/portal/dzpz.jsp?id=5eb10afc74a2462c8e86652ec8d90a48

我们会发现,两者仅仅是尾巴后面的id串不同而已!
而id值可以从首页对应的ajax请求到的json串中获取!
域名和id值拼接成一个完整的企业的详情页的url。

但详情页的内容也是动态加载出来的,所以不能通过详情页的url去获取到公司的详情数据。

任取两个公司的ajax请求,观察它们的url:
http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById
http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById

两个公司的ajax请求的url都是一样的,所不同的是它们的参数id。

如果我们可以获取多家企业的id后,就可以将id和url形成一个完整的详情页对应详情数据的ajax请求的url。

import requests
import json

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/89.0.4389.90 Safari/537.36 Edg/89.0.774.63'
}

id_list = [] # 存储企业的id
all_data_list=[] # 存储所有的企业的详情数据

for page in range(1,6):   #爬取前五页。
    page = str(page)
    data = {
    'on': 'true',
    'page': page,
    'pageSize': '15',
    'productName':'',
    'conditionType': '1',
    'applyname':'',
    'applysn':''
    }

    json_ids = requests.post(url=url,headers=headers,data=data).json()
    for dic in json_ids['list']:
        id_list.append(dic['ID'])

post_url = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById'
for id in id_list:
    data = {
        'id':id
    }
    datail_json = requests.post(url=post_url,headers=headers,data=data).json()
    all_data_list.append(datail_json)
fp = open('allData.json', 'w', encoding='utf-8')
json.dump(all_data_list,fp = fp,ensure_ascii=False)
print("over!!!")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值