Python爬虫实战综合(requests)

Python爬虫实战综合(requests)

1. 需求:

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

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

  • # 首先验证出那些企业信息是动态加载出来的
    # 不是通过这个url http://scxk.nmpa.gov.cn:81/xk/可以请求到的
    # 动态加载数据 ajax 抓包工具验证
    
  • 通过对详情页url~的观察发现:

    • url~的域名都是一样的,只有携带的参数(id)不一样
    • id值可以从首页对应的ajax请求到的json串中获取
    • 域名和id值拼接成一个完整的企业对应的详情页的url
  • 通过抓包工具可以知道,详情页的企业详情数据也是动态加载出来的,不能通过以上我们拼接出来的url直接用程序爬取到。(不能通过这组url直接发请求)

  • 请添加图片描述

  • http://scxk.nmpa.gov.cn:81/xk/itownet/portal/dzpz.jsp?id=c6fe0e0c374448128149352fc8aca2a3

  • http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById(用这组url)ajax请求

  • 观察后发现:

    • 所有的post请求的url都是一样的,只有参数id值是不同。
    • 批量获取多家企业的id后,就可以将id和url形成一个完整的详情页对应详情数据的ajax请求的url

2. 代码

# UA伪装修改
import requests
import json
# url = 'http://scxk.nmpa.gov.cn:81/xk/'
headers = {
    'User-Agent':'Mozill。。。'
}

# response = requests.get(url = url, headers = headers)
# print(response.text)
# 验证出那些企业信息是动态加载出来的
# 不是通过这个url http://scxk.nmpa.gov.cn:81/xk/可以请求到的
# 动态加载数据 ajax 抓包工具验证

# 批量获取不同企业的id值
url1 = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList'
id_lists = [] # 存储企业的id
data_lists = [] # 存储企业详情的字典列表
# page 可调控
for page in range(1,6):
    page = str(page)
    # 参数的封装
    param = {
        'on': 'true',
        'page': page,
        'pageSize': '15',
        'productName': '',
        'conditionType': '1',
        'applyname': '',
        'applysn': '',
    }
    response_ids = requests.post(url=url1, headers=headers, data=param).json() # 得到字典对象

    # print(response_ids['list'])

    for dic in response_ids['list']:
        id_lists.append(dic['ID']) # 将每个企业id存储起来

# 获取企业详情数据
url2 = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById'
for id in id_lists:
    # 每次取出一组id封装到参数中
    param_id = {
        'id': id
    }
    detail_json = requests.post(url=url2, headers=headers, data=param_id).json() # 结果
    # print(detail_json)
    data_lists.append(detail_json)
fp = open('./detail.json', 'w', encoding='utf-8')
json.dump(data_lists, fp=fp, ensure_ascii=False)
print('结束')

# 新添加分页操作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑师傅炒板栗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值