爬蟲 404 try 和我一起學爬蟲

2021-10-11 19:20:38 字數 2448 閱讀 9894

前幾天就想寫乙個爬蟲系列的文章,因為比較忙所以沒有寫(還不是因為懶),趁著現在屋裡比較的涼爽,心也比較的靜,總結下目前遇到的一些爬蟲知識,本系列將從簡單的爬蟲開始說起,以後會逐漸的提公升難度,同時會對反爬手段做乙個總結,以及用具體的事例來演示,不同的反爬現象和實現手段。

本系列側重點是應用和實戰,所以,對於軟體的安裝這些基本操作不做詳細講解,我這裡認為你已經有了一定的python基礎,所以對於python的安裝一定會有一定的了解了,這裡廢話不多說讓我們進入正題。

鑑於大多數人的系統是windows系統,所以這裡的所有內容都是在windows下進行的,另外推薦安裝谷歌瀏覽器,使用語言python,版本3.6(低版本不能使用requests_html)。主要的爬蟲模組requests_html。

from requests_html import htmlsession
2.建立乙個session物件,目的是維持一次完整的會話。

session=htmlsession()
3.通過get方法訪問網路

url=''

req=session.get(url=url,headers=headers)

get方法需要傳入兩個引數,乙個是url,乙個是headers(字典型別)。一般的我們傳入乙個user_agent就可以愉快的使用了。(這裡只是說一般的對於有先**伺服器還會監測headers的其他屬性內容)。我們會獲取乙個response物件。

拓展:如果檢視requests_html的原始碼會發現預設是給了幾個headers屬性的。

def default_headers():

""":rtype: requests.structures.caseinsensitivedict

"""return caseinsensitivedict()

4.獲取網頁返回的狀態碼

一般的我們把200狀態碼認為是響應成功(並不一定是你想要的結果,比如登陸失敗有些也是200)。

其他常見的還有,404網頁訪問失敗,500伺服器拒絕訪問,302和301作為網頁的重定向。

if req.status_code==200:

print("ok")

5.獲取正確的網頁編碼

因為每個頁面的編碼不同,可能導致在解析的時候出現亂碼的情況,對此requests_html模組為我們提供了乙個可以高準確率獲取編碼的方法,目前來看對於絕大對數html頁面是沒有問題的,所以可以放心使用。

node_list=req.html.xpath("//div[@id='u1']/a/text()")
簡單說下上面xpath表示式的含義,//從匹配選擇的當前節點擊擇文件中的節點,而不考慮它們的位置。/表示從根節點擊取。後面跟的ediv表示是div節點,中括號裡面一般是做屬性判斷@id就是判斷id屬性然後取其值為ul的,後面緊跟的/a,表示上面div節點的下級所有含有a的節點,然後後面的text()是表示獲取該節點的文字資訊。

8綜合整理下上面的**如下:

print("出錯了錯誤內容是",format_exc)

輸出結果:

和我一起入門python爬蟲

前幾天就想寫乙個爬蟲系列的文章,因為比較忙所以沒有寫 還不是因為懶 趁著現在屋裡比較的涼爽,心也比較的靜,總結下目前遇到的一些爬蟲知識,本系列將從簡單的爬蟲開始說起,後會逐漸的提公升難度,同時會對反爬手段做乙個總結,以及用具體的事例來演示,不同的反爬現象和實現手段。本系列側重點是應用和實戰,所以,對...

和我一起學Flask ORM

from sqlalchemy.ext.declarative import declarative base engine create engine db url base declarative base engine 1,用base 類作為基類來寫自己的orm類 要定義tablename類屬...

一起學爬蟲(一)入門須知

可憐的博主終於熬過了考試周 半條命都沒了 跪求下學期開學,別再上網課了,真管不住自己 手動狗頭 考試周期間有很多 悔不當初 不再一一枚舉,但其中有一條就是這學期的python課真的太水了,學了一學期啥也不會 所以,打算暑假啃一本 python網路爬蟲從入門到實踐 這一系列部落格的內容呢將是我在學習過...