天天看點

資料采集(案例)

作業(爬取藥監總局)

  • 需求:爬取藥監總局中的企業詳情資料,每一家企業詳情頁對應的詳情資料(爬取前5頁企業)
  • url: http://125.35.6.84 :81/xk/
  • 分析:
    • 企業詳情資料是否為動态加載資料?
      • 基于抓包工具進行局部搜尋。發現為動态加載資料
    • 捕獲動态加載的資料
      • 基于抓包工具進行全局搜尋。
      • 定位到的資料包提取的
          • :81/xk/itownet/portalAction.do?method=getXkzsById
        • 請求參數:
          • id: 536878abac734332ae06dcb1a3fbd14a
          • id: 950d66fbf8714fbc9e799010e483d2d5
      • 結論:每一家企業詳情資料對應的請求url和請求方式都是一樣的,隻有請求參數id的值不一樣。
        • 如果我們可以将每一家企業的id值捕獲,則就可以将每一家企業詳情資料進行爬取。
    • 捕獲企業的id
      • 企業的id表示的就是唯一的一家企業。我們就猜測企業id可能會和企業名稱捆綁在一起。
      • 在首頁中會有不同的企業名稱,則我們就基于抓包工具對首頁的資料包進行全局搜尋(企業名稱)
        • :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)           
下一篇: IP代理