数据采集(案例)

作业(爬取药监总局)

  • 需求:爬取药监总局中的企业详情数据,每一家企业详情页对应的详情数据(爬取前5页企业)
  • url:http://125.35.6.84:81/xk/
  • 分析:

    • 企业详情数据是否为动态加载数据?

      • 基于抓包工具进行局部搜索。发现为动态加载数据
    • 捕获动态加载的数据

      • 基于抓包工具进行全局搜索。
      • 定位到的数据包提取的

        • url:

        • 请求参数:

          • id: 536878abac734332ae06dcb1a3fbd14a
          • id: 950d66fbf8714fbc9e799010e483d2d5
      • 结论:每一家企业详情数据对应的请求url和请求方式都是一样的,只有请求参数id的值不一样。

        • 如果我们可以将每一家企业的id值捕获,则就可以将每一家企业详情数据进行爬取。
    • 捕获企业的id

      • 企业的id表示的就是唯一的一家企业。我们就猜测企业id可能会和企业名称捆绑在一起。
      • 在首页中会有不同的企业名称,则我们就基于抓包工具对首页的数据包进行全局搜索(企业名称)

        • url:http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList
        • 方式:post
        • 请求参数:

          • on=true&page=1&pageSize=15&productName=&conditionType=1&applyname=&applysn=
 import requests

#获取每一家企业的id值,去首页分析查找对应企业的id值
url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList'
data = {
    'on': 'true',
    'page': '1',
    'pageSize': '15',
    'productName': '',
    'conditionType': '1',
    'applyname': '',
    'applysn': '',
}
response = requests.post(url=url,headers=headers,data=data)
all_company_list = response.json()['list']
for dic in all_company_list:
    _id = dic['ID']
#     print(_id)
    #将id作为请求企业详情数据url的请求参数
    detail_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'
    data = {
        'id':_id
    }
    response = requests.post(url=detail_url,headers=headers,data=data)
    company_detail_dic = response.json()
    person_name = company_detail_dic['businessPerson']
    addr = company_detail_dic['epsProductAddress']
    print(person_name,addr)
 import requests

#捕获多页数据
#获取每一家企业的id值,去首页分析查找对应企业的id值
url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList'
for page in range(1,6):
    data = {
        'on': 'true',
        'page': str(page),
        'pageSize': '15',
        'productName': '',
        'conditionType': '1',
        'applyname': '',
        'applysn': '',
    }
    response = requests.post(url=url,headers=headers,data=data)
    all_company_list = response.json()['list']
    for dic in all_company_list:
        _id = dic['ID']
    #     print(_id)
        #将id作为请求企业详情数据url的请求参数
        detail_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'
        data = {
            'id':_id
        }
        response = requests.post(url=detail_url,headers=headers,data=data)
        company_detail_dic = response.json()
        person_name = company_detail_dic['businessPerson']
        addr = company_detail_dic['epsProductAddress']
        print(person_name,addr)
上一篇:阿里JAVA手册之MySQL数据库 (建表规约、索引规约、SQL语句、ORM映射)


下一篇:java经常使用16种工具类