zoukankan      html  css  js  c++  java
  • (二)requests-爬取国家药监局生产许可证数据

    首先访问这个页面 url = 'http://125.35.6.84:81/xk/'

    我们的目标是抓取这里的每一个企业的详情页数据,但是可以发现这里只有企业的简介信息,所以这就意味着我们要发送两次get请求。

    在写代码之前,我们可以大概看一下我们想要的数据大概在什么位置。

    1. 我们打开一个公司的详情页

     2. 右击检查,通过Response查找对应的目标数据

    从这里我们可以看出,当前的数据是通过ajax请求动态加载出来的

     3.查看头信息,以及参数信息

    我们可以看出,当前的请求是post请求,所需要的参数是id,但是从以上的数据来看我们并没有发现哪里有id这个参数。因为我们将目光聚焦到首页。

    4. 分析首页所返回的数据

     同样是右击检查,打开抓包工具

     从这里我们可以看出首页的数据也是通过ajax动态加载出来的,并且通过观察我们可以发现在ID的踪迹,至此我们就可以形成一条完整的思路。

    5.我们可以看看首页的请求方式,与是否携带了参数

    6. 思路:拿到首页的响应数据的ID,并以此为参数向详情页发送post请求,拿到每个详情页的详情数据。

    7.代码实现:

    import requests
    import json
    
    if __name__ == '__main__':
        # 获取各个企业id
        id_list = []
        # 这里的url并非是首页的url 首页中的所有企业信息都是通过ajax动态请求的 因此应查看对应包中的url
        url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList'
        header = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36'
        }
        # 获取前五页的数据
        for page in range(1, 5):
            page = str(page)
            # 首页请求所需参数
            data = {
                'on': 'true',
                'page': page,
                'pageSize': '15',
                'productName': '',
                'conditionType': '1',
                'applyname': '',
                'applysn': ''
            }
    
            # 向首页发送请求
            response = requests.post(url=url, data=data, headers=header)
            # 拿到json格式的数据
            info = response.json()
            # 拿到所有企业信息的列表
            target_id = info['list']
            for i in target_id:
                # 获取所有企业的id
                id_list.append(i['ID'])
    
            # 获取企业详情信息
        ret_list = []
        url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'
    
        # 获取所有企业的详情数据
        for i in id_list:
            data = {
                'id': i
            }
            ret = requests.post(url=url, data=data, headers=header)
            ret_list.append(ret.json())
    
        # 持久化存储
        fileName = 'files/药监总局.json'
        with open(fileName, 'w', encoding='utf-8') as f:
            f.write(json.dumps(ret_list, ensure_ascii=False))
        print('work is done')
  • 相关阅读:
    supervised learning 监督式学习
    4.4 day14 内置函数
    4.3 day13 迭代器 生成器
    4.2 homework
    4.2 day12 装饰器-带参数
    3.29 homework
    SQL Server 索引和视图
    SQL Server 事务、异常和游标
    SQL Server 触发器
    SQL Server 存储过程
  • 原文地址:https://www.cnblogs.com/sxy-blog/p/13213859.html
Copyright © 2011-2022 走看看