【药监总局】python&&抓取企业详情数据

提前准备工作

一.http://scxk.nmpa.gov.cn:81/xk/

二.要求:抓取每一家企业的企业详情数据

思路

1.在对一个陌生的网站进行数据爬取前,首先要确定我们想要爬取的数据是否为动态加载数据?

2.先进入到任意一家企业的详情页中,查看企业的详情数据是否为动态加态数据?

  # 3.基于抓包工具进行局部搜索
  # 搜索的到:不是动态加载
  # 搜索不到:是动态加载
    # 发生企业的详情数据是动态加载数据

3如何捕获动态加载数据

  # 基于抓包工具进行全局搜索,定位到动态加载数据对应的数据包
    # url:http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById
    # 请求方式:POST
    # 请求参数: id: a3fc0c56ea71460b9b94fc356a81a35a
# 再次对另一家企业的企业详情数据进行分析
  # 定位到了动态加载数据对应的数据包
   # 在该数据包中可以提取到url,请求方式和请求参数,对比发现,不同企业的详情数据的数据包请求方式和url是一样的,只有请求参数id的值不一样

  #结论:不同企业的企业详情数据对应的数据包只有id的参数不同,剩下都一样
  #结果:如果我们可以批量获取多家企业的id值,就可以批量获取更多家企业的企业详情数据。

  # 如何指量获取多家企业的id值?
     # id通常表示一组数据的唯一标识。联想到企业的名称也会作为企业的唯一标识
      # 那么会不会企业的id和企业的名称在页面中是绑定在一起的呢?
      # 测试:在首页通过企业名称找到企业的id
       # 通过抓包工具的分析,首页中企业的名称等信息也是动态加载数据。
       # 捕获动态加载数据。定位到指定的数据包,从数据包的响应数据中发现了不同企业id
       # 就可以将不同企业的id取到

解析网页如下(图一)

在这里插入图片描述

图二

在这里插入图片描述
##点击进入单个网页公司 - > 解析(图三)
在这里插入图片描述

撸代码

import requests
# import json
# UA伪装
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36X-Requested-With: XMLHttpRequest'
}

main_url ='http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList'
m_data = {
    'on': 'true',
    'page': '1',
    'pageSize': '15',
    'productName': '',
    'conditionType': '1',
    'applyname': '',
    'applysn': ''
}

m_response=requests.post(url=main_url,headers=headers,data=m_data)
json_data = m_response.json()
ids = [] # 存储多家企业的id
for dic in json_data['list']:
    _id = dic['ID']
    ids.append(_id)
    # print(_id)

# 循环对每一家企业的详情数据进行获取
for _id in ids:
    # 指定url
    url = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById'
    # 请求参数
    data = {
        'id': _id
    }

    # 发起的post请求
    response = requests.post(url=url,data=data,headers=headers)
    # response.encoding("utf-8")
    # 获取响应数据
    json_data = response.json() # 如果确定响应数据为json格式字符串才可以调用json方法现实格式化
    # 获取企业名称,法人代表,许可证编号 生产许可项目 企业住所
    print(json_data['epsName'],json_data['legalPerson'],json_data['productSn'],json_data['certStr'],json_data['epsProductAddress'])

爬取想要的信息如(图)

在这里插入图片描述

执行结果

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值