當前位置:首頁 » 編程語言 » python爬蟲豆瓣

python爬蟲豆瓣

發布時間: 2025-09-17 03:41:59

⑴ 【python爬蟲】分析網頁真實請求

1、抓取網頁、分析請求
2、解析網頁、尋找數據
3、儲存數據、多頁處理

翻頁有規律:
很多網址在第一頁時並沒有變化,多翻下一頁後規律就出來,比如 豆瓣第一頁 和 豆瓣第三頁

發現start為40,limit=20,所以猜測start=0就是第一頁,每頁顯示20條數據,對於第三頁顯示的參數可以一個個刪除驗證,可以減去不必要的參數, 但是刪除前一定要做好數據的對比

(1) 文本框輸入後產生一個請求,如常見的登錄、注冊頁面
Referer:表示當前請求的來源
Request URL:表示實際請求地址

翻頁後URL不變,該如何尋找請求?
如: http://www.zkh360.com/zkh_catalog/3.html

通過對比可以發現網站是通過pageIndex參數控制翻頁的,?表示連接

接下來用抓包工具分析下 ,從第四頁開始看URL就知道了,但是前面幾面需要查看請求的參數,這里偏多,就切換到【Inspectors--Webforms】選項,看的比較直觀

類似的網站還有 今日頭條 ,有興趣的朋友可以去研究下
(可通過獲取max_behot_time的值而改變as和cp)

⑵ python爬蟲怎麼處理豆瓣網頁異常請求

1.URLError

首先解釋下URLError可能產生的原因:

  • 網路無連接,即本機無法上網

  • 連接不到特定的伺服器

  • 伺服器不存在

  • 在代碼中,我們需要用try-except語句來包圍並捕獲相應的異常。下面是一個例子,先感受下它的風騷

    Python

    1

    2

    3

    4

    5

    6

    7

  • import urllib2

    requset = urllib2.Request('http://www.xxxxx.com')

    try:

    urllib2.urlopen(requset)

    except urllib2.URLError, e:

    print e.reason

  • 我們利用了 urlopen方法訪問了一個不存在的網址,運行結果如下:

    Python

    1

  • [Errno 11004] getaddrinfo failed

  • 它說明了錯誤代號是11004,錯誤原因是 getaddrinfo failed

    2.HTTPError

    HTTPError是URLError的子類,在你利用urlopen方法發出一個請求時,伺服器上都會對應一個應答對象response,其中它包含一個數字」狀態碼」。舉個例子,假如response是一個」重定向」,需定位到別的地址獲取文檔,urllib2將對此進行處理。

    其他不能處理的,urlopen會產生一個HTTPError,對應相應的狀態嗎,HTTP狀態碼表示HTTP協議所返回的響應的狀態。下面將狀態碼歸結如下:

    100:繼續 客戶端應當繼續發送請求。客戶端應當繼續發送請求的剩餘部分,或者如果請求已經完成,忽略這個響應。

    101: 轉換協議 在發送完這個響應最後的空行後,伺服器將會切換到在Upgrade 消息頭中定義的那些協議。只有在切換新的協議更有好處的時候才應該採取類似措施。

    102:繼續處理 由WebDAV(RFC 2518)擴展的狀態碼,代表處理將被繼續執行。

    200:請求成功 處理方式:獲得響應的內容,進行處理

    201:請求完成,結果是創建了新資源。新創建資源的URI可在響應的實體中得到 處理方式:爬蟲中不會遇到

    202:請求被接受,但處理尚未完成 處理方式:阻塞等待

    204:伺服器端已經實現了請求,但是沒有返回新的信 息。如果客戶是用戶代理,則無須為此更新自身的文檔視圖。 處理方式:丟棄

    300:該狀態碼不被HTTP/1.0的應用程序直接使用, 只是作為3XX類型回應的默認解釋。存在多個可用的被請求資源。 處理方式:若程序中能夠處理,則進行進一步處理,如果程序中不能處理,則丟棄
    301:請求到的資源都會分配一個永久的URL,這樣就可以在將來通過該URL來訪問此資源 處理方式:重定向到分配的URL

    302:請求到的資源在一個不同的URL處臨時保存 處理方式:重定向到臨時的URL

    304:請求的資源未更新 處理方式:丟棄

    400:非法請求 處理方式:丟棄

    401:未授權 處理方式:丟棄

    403:禁止 處理方式:丟棄

    404:沒有找到 處理方式:丟棄

    500:伺服器內部錯誤 伺服器遇到了一個未曾預料的狀況,導致了它無法完成對請求的處理。一般來說,這個問題都會在伺服器端的源代碼出現錯誤時出現。

    501:伺服器無法識別 伺服器不支持當前請求所需要的某個功能。當伺服器無法識別請求的方法,並且無法支持其對任何資源的請求。

    502:錯誤網關 作為網關或者代理工作的伺服器嘗試執行請求時,從上游伺服器接收到無效的響應。

    503:服務出錯 由於臨時的伺服器維護或者過載,伺服器當前無法處理請求。這個狀況是臨時的,並且將在一段時間以後恢復。

    HTTPError實例產生後會有一個code屬性,這就是是伺服器發送的相關錯誤號。
    因為urllib2可以為你處理重定向,也就是3開頭的代號可以被處理,並且100-299范圍的號碼指示成功,所以你只能看到400-599的錯誤號碼。

    下面我們寫一個例子來感受一下,捕獲的異常是HTTPError,它會帶有一個code屬性,就是錯誤代號,另外我們又列印了reason屬性,這是它的父類URLError的屬性。

    Python

    1

    2

    3

    4

    5

    6

    7

    8

  • import urllib2

    req = urllib2.Request('httt/cqcre')

    try:

    urllib2.urlopen(req)

    except urllib2.HTTPError, e:

    print e.code

    print e.reason

  • 運行結果如下

    Python

    1

    2

  • 403

    Forbidden

  • 錯誤代號是403,錯誤原因是Forbidden,說明伺服器禁止訪問。

    我們知道,HTTPError的父類是URLError,根據編程經驗,父類的異常應當寫到子類異常的後面,如果子類捕獲不到,那麼可以捕獲父類的異常,所以上述的代碼可以這么改寫

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

  • import urllib2

    req = urllib2.Request('hcqcre')

    try:

    urllib2.urlopen(req)

    except urllib2.HTTPError, e:

    print e.code

    except urllib2.URLError, e:

    print e.reason

    else:

    print "OK"

  • 如果捕獲到了HTTPError,則輸出code,不會再處理URLError異常。如果發生的不是HTTPError,則會去捕獲URLError異常,輸出錯誤原因。

    另外還可以加入 hasattr屬性提前對屬性進行判斷,代碼改寫如下

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

  • import urllib2

    req = urllib2.Request('httcqcre')

    try:

    urllib2.urlopen(req)

    except urllib2.URLError, e:

    if hasattr(e,"code"):

    print e.code

    if hasattr(e,"reason"):

    print e.reason

    else:

    print "OK"

  • 首先對異常的屬性進行判斷,以免出現屬性輸出報錯的現象。

    以上,就是對URLError和HTTPError的相關介紹,以及相應的錯誤處理辦法,小夥伴們加油!

⑶ 學習python爬蟲推薦書籍

1、基礎書籍:《Python編程》


推薦理由:作者專業水平極高,從原理到開發實戰,內容詳盡且涉及面廣,通過多個案例介紹了不同場景下如何實現數據爬取,通篇干貨,無一點水分。

適讀群體:適合有一定Python基礎,或有開發經驗想轉爬蟲方向的讀者。

熱點內容
真我手機如何修改登錄密碼 發布:2025-09-17 05:20:26 瀏覽:312
電腦配置怎麼說 發布:2025-09-17 04:37:45 瀏覽:1000
三質數編程 發布:2025-09-17 04:04:41 瀏覽:558
ftp伺服器密碼如何修改 發布:2025-09-17 03:48:07 瀏覽:301
python爬蟲豆瓣 發布:2025-09-17 03:41:59 瀏覽:209
我的世界國際版加入伺服器電腦版 發布:2025-09-17 03:41:14 瀏覽:939
附件上傳相片 發布:2025-09-17 03:39:53 瀏覽:442
微信賬號密碼組合是什麼 發布:2025-09-17 03:30:05 瀏覽:400
windows如何查看ftp安裝環境 發布:2025-09-17 03:30:02 瀏覽:918
java培訓機構推薦 發布:2025-09-17 03:20:58 瀏覽:93