requests实战爬取生产许可证信息

本次案例涉及到requests的使用比较全面!!!

首先我们打开网址:
化妆品许可证

图1:
在这里插入图片描述

图2:
在这里插入图片描述

这里我们要爬取的信息就是上图中的许可证信息。
这里我们分析一下,如果我们要获取到图2中的信息,首先我们要得到它的url,它的url也只能通过图1中的数据获得。

步入正题:

我们使用抓包工具看一下数据到底是怎么传输的:

在这里插入图片描述

在这里插入图片描述

这里我们找到了这个请求,我么发现在它的返回response中并没有有关企业的信息。所以我们可以判断它可能是通过Ajax请求数据。

我们在往下看其他请求,我们发现在这个请求中我们找到了有关企业的一部分信息:

在这里插入图片描述

这里我们看一下许可证信息的url:

在这里插入图片描述

不难发现它的url中就包含ID,我们再看看其他的几个许可证:

在这里插入图片描述

我们发现他们的url中只有id不同其他的都是一样的,所以我们需要获取到它们的id参数。

所以我们来看一下这个请求的请求头:

在这里插入图片描述

我们可以得到它的url以及数据类型是json。
接下来我们看一下它传递的参数:

在这里插入图片描述

这几个参数也比较好理解。我们能用到的也就是:page(页码)pageSize(每页显示个数)

代码段1:

import requests
import json

url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList'
#批量获取不同企业的id值
headers = {
    'User-Agent': 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1'
}

id_list=[]  #存储企业id

#参数封装
for page in range(1,20):
    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'])
    print(id_list)
注:这里我们只需要id参数,所以我们要对爬取的json数据进行处理,提取处理id参数。

获取到id后我们分析一下许可证信息页面,这里有个问题许可证信息页面是否也是Ajax传输的数据呢?我们还是抓下包看一下:

在这里插入图片描述

在这里插入图片描述
这里我们发现它的response中也没有关于信息的数据,所以它也是动态传输数据。我们再往下看请求。

在这里插入图片描述

我们在 ‘portalAction.do?method=getXkzsById’ 这个请求中发现了有关信息的数据。
我们看下请求头:

在这里插入图片描述

在这里插入图片描述

我们可以得到url,返回数据和传递的参数。
这里我们观察多个页面的url,发现url中也只有id有区别。所以这里仍要用到我们之前爬取的id。
返回值类型也是json类型,传递的参数也只有id。
到这里页面就分析完了,下面就是完整代码:

完整代码:

import requests
import json

url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList'
#批量获取不同企业的id值
headers = {
    'User-Agent': 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1'
}

id_list=[]  #存储企业id

#参数封装
for page in range(1,20):
    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'])
    print(id_list)

#获取企业详情数据
post_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'
for id in id_list:
    data = {
        'ID':id,
    }
    final_data = requests.post(url=url,headers=headers,data=data).json()
    print(final_data)
    #持久化存储
    fp = open('./huazhuangpin.json', 'w', encoding='utf-8')
    json.dump(final_data, fp=fp, ensure_ascii=False)

这样就能爬取到产品许可证的详细信息啦。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值