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)

這樣就能爬取到產品許可證的詳細信息啦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章