(二)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')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM