爬蟲入門(二)讓爬蟲健壯起來

2021-07-31 10:10:10 字數 2173 閱讀 4459

不知道大家有沒有去編寫**實戰呢,如果有的話可能你就會發現有很多問題,最常見的就是爬取一段時間後就突然爬取不了了,整個程式直接中斷了,又要重新開始爬取是很扎心的事情……顯然別人的**也不是傻子,肯定會有一定的反爬蟲方法嘛

一般**上比較常見的有兩種方法

當然還有其他的方法,但是呢入門嘛我們就先解決這兩種反爬蟲方法

user_agent = [
在mzitu類新增獲取ip,user-agent的**,很簡單,我們就隨機從列表返回乙個就可以了
def getuser_agent(self):

ua = random.choice(self.user_agent)

headers =

return headers

def getuser_ip(self):

ip = random.choice(self.user_ip)

ip =

return ip

然後我們的requets.get()就可以改寫成這個樣子,不熟悉的可以去翻翻文件咯
requests.get(url,headers=self.getuser_agent(),proxies=self.getuser_ip())
但是呢僅此而已還是不夠的,萬一還是返回失敗或者本身自己的網路就不好呢?那麼整個程式還是會中斷的,我們不想它就這樣草草中斷了,於是乎我們可以給它請求函式再新增一些異常判斷

因為要對requests.get()進行一些判斷,我們可以再寫乙個函式來封裝這個requests.get()方法,讓它成為乙個健壯的getrespon方法

#位址,延遲時間,重新嘗試次數,**ip,

def getrespon(self,url,timeout,num_retries=4,proxy=none):

if proxy == none:

try:

return requests.get(url,headers=self.getuser_agent(),timeout=timeout)

except:

if num_retries > 0:

print(u'嘗試重新連線,等待10s,剩餘次數:%s次'%(num_retries))

time.sleep(10)

return self.getrespon(url,timeout,num_retries-1)

else:

print(u'我的ip不好使啦,使用**ip')

return self.getrespon(url,timeout,4,self.getuser_ip())

else:

try:

return requests.get(url,headers=self.getuser_agent(),proxies=proxy,timeout=timeout)

except:

if num_retries > 0:

print(u'嘗試重新連線,等待10s,剩餘次數:%s次'%(num_retries))

time.sleep(10)

return self.getrespon(url,timeout,num_retries-1)

else:

print(u'**ip有點不好用,取消**')

return self.getrespon(url,timeout,4,none)

這就是我改寫的函式了,首先我們預設用自己的ip進行訪問,如果超過一定的嘗試次數我們可以認為你的ip就暫時被遮蔽了,那麼我們就可以換乙個ip繼續來嘛,這樣往復訪問

這樣呢我們只要把我們這個類裡面其他呼叫requests.get()方法的位置改為我們的getrespon方法就可以啦

另外還有乙個地方是要加異常處理的,那就是我們建立資料夾的地方os.mkdir(dirname)

因為我在爬取到最後幾頁的時候突然出錯了,震驚!是因為本身那個的標題就是***/***/***,而這個**沒有對進行不識別轉義字元的操作,所以建立資料夾的時候它會在目錄/***/***/***下建立,而前面的兩個***資料夾根本就沒有,然後……gg,因為懶的關係我就直接加了個異常直接跳過

try:

os.mkdir(dirname)

except:

return false

大概這樣改完呢乙個比較健壯的爬蟲就出來啦,可以工作比較長時間了~

爬蟲二 Python爬蟲入門二

1.認識爬蟲 1.1 什麼是爬蟲 爬蟲 一段自動抓取網際網路資訊的程式,從網際網路上抓取對於我們有價值的資訊。1.2 python的爬蟲架構 網頁解析器 將乙個網頁字串進行解析,可以按照我們的要求來提取出我們有用的資訊,也可以根據dom樹的解析方式來解析。網頁解析器有正規表示式 直觀,將網頁轉成字串...

爬蟲入門(二)

我們了解了requests庫所有的方法以及response物件的所有屬性,但是我們只嘗試了requests的get方法並且只新增了url這個引數,接下來我們舉幾個稍微複雜點的例子來看一下。新增瀏覽器頭import requests try kv r requests.get url,headers ...

Python爬蟲入門 二

爬蟲,即網路爬蟲,大家可以理解為在網路上爬行的一直蜘蛛,網際網路就比作一張大網,而爬蟲便是在這張網上爬來爬去的蜘蛛咯,如果它遇到資源,那麼它就會抓取下來。想抓取什麼?這個由你來控制它咯。比如它在抓取乙個網頁,在這個網中他發現了一條道路,其實就是指向網頁的超連結,那麼它就可以爬到另一張網上來獲取資料。...