Python爬蟲 四 稍微複雜的爬蟲案例二

2022-05-29 02:24:12 字數 2794 閱讀 5832

我們在前面一章做了乙個稍微複雜的爬蟲,這裡我們再另外乙個爬蟲

需求分析

現在我們要從下面的**(國家藥品監督管理局)爬取到所有的企業名稱和其對應的生產許可證資訊

上面的圖就是主頁的效果,注意一下一共是365頁,美業是15條資訊

隨便點開乙個公司對應的鏈結

就是這樣的內容

資料持久化的要求是每個公司對應乙個檔案,檔名就是公司名稱。

為了說明流程,這裡不爬取所有的資料,只爬3頁的就行了,主要說明爬蟲的流程。

流程分析

整個爬蟲主要分兩個步驟,第乙個是拿到每頁上的各個公司對應的鏈結,第二步是獲取到第二個頁面上的公司資訊

公司的獲取

先用抓包工具看一下第乙個頁面上請求的過程以及資料是通過什麼方式過來的!

前端上每個公司都是乙個li標籤

而標籤裡的內容是通過ajax請求拿到的資料。我們可以看看響應部分的內容

"

filesize

":""

,

"keyword

":""

,

"list":[

,"xk_date

":"2026-01-24",

"qf_manager_name

":"江蘇省藥品監督管理局",

"business_license_number

":"91321291ma22cl3c26",

"xc_date

":"2021-01-25",

"num_

":1},

,"xk_date

":"2026-01-24",

"qf_manager_name

":"江蘇省藥品監督管理局",

"business_license_number

":"9132011608773791x1",

"xc_date

":"2021-01-25",

"num_

":2},

上面的內容是兩條li標籤裡的內容,注意下最開始第二個頁面截圖中的url,是帶了乙個引數的

注意那個引數id,就是我們在上面那個ajax請求獲取到的json資料裡的一部分內容

詳細內容的獲取

第二個頁面中我們要獲取到內容是在乙個table裡,那麼**裡的資料是怎麼來的呢?同樣我們還是從抓包工具看一下

注意到請求的引數了麼,這就是我們剛才獲取到的id

**實現

我們先獲取到第一部分的內容

import

requests

import

json

if__name__ == '

__main__':

url = '

'head =

data =

company_list =

for i in range(1,4):

data[

'page

'] =str(i)

request = requests.post(url=url,headers=head,data=data)

comp = request.json()['

list']

for company in

comp:

company_name = company['

eps_name']

company_id = company['id'

]

'name

':company_name,'

id':company_id})

要注意一點:我們傳送post請求對應的url並不是我在這一頁一開始**貼出來的官網位址,而是ajax請求對應的位址

for迴圈是我們指定了個頁數,在爬取每頁資料的過程中,做了乙個列表,列表裡存放的是公司名稱和對應的id所組成的字典。下面就可以通過這個列表爬取具體的資料了

具體資料的獲取

和上面的爬取資料的過程一樣,就是在乙個迴圈裡我們拿到需要的資料

detail_url = '

'for company in

company_list:

data2 =

request = requests.post(url=detail_url,headers=head,data=data2)

with open(company[

'name

']+'

.txt

','w

',encoding='

utf-8

') as f:

_comp =request.json()

json.dump(_comp,f,ensure_ascii=false)

這裡要注意點一點,就是因為返回的資料裡是包含有中文的,在寫入json資料時如果有中文要加上引數:ensure_ascii=false。

整個爬蟲過程沒什麼難點,主要是讓我們知道其工作的流程。

python爬蟲反爬 爬蟲怎麼測試反爬?

有沒有反爬,如果你沒有用爬蟲抓取過,你是不可能知道的。就算要測試,你還要嘗試不同的delay。如果設定的 delay 在 的反爬頻率外,那就測不出來。如果在頻率內,那就被封。或者封ip,或者封賬號。如果一定要測出來,就簡單粗暴的方法,你不要設定delay,就不間斷的抓,最後出現兩種情況,1 有反爬,...

Python 爬蟲爬取網頁

工具 python 2.7 import urllib import urllib2 defgetpage url 爬去網頁的方法 request urllib.request url 訪問網頁 reponse urllib2.urlopen request 返回網頁 return response...

python爬蟲爬取策略

在爬蟲系統中,待抓取url佇列是很重要的一部分。待抓取url佇列中的url以什麼樣的順序排列也是乙個很重要的問題,因為這涉及到先抓取那個頁面,後抓取哪個頁面。而決定這些url排列順序的方法,叫做抓取策略。下面重點介紹幾種常見的抓取策略 一 深度優先遍歷策略 深度優先遍歷策略是指網路爬蟲會從起始頁開始...