不知道大家有沒有去編寫**實戰呢,如果有的話可能你就會發現有很多問題,最常見的就是爬取一段時間後就突然爬取不了了,整個程式直接中斷了,又要重新開始爬取是很扎心的事情……顯然別人的**也不是傻子,肯定會有一定的反爬蟲方法嘛
一般**上比較常見的有兩種方法
當然還有其他的方法,但是呢入門嘛我們就先解決這兩種反爬蟲方法
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爬蟲入門 二
爬蟲,即網路爬蟲,大家可以理解為在網路上爬行的一直蜘蛛,網際網路就比作一張大網,而爬蟲便是在這張網上爬來爬去的蜘蛛咯,如果它遇到資源,那麼它就會抓取下來。想抓取什麼?這個由你來控制它咯。比如它在抓取乙個網頁,在這個網中他發現了一條道路,其實就是指向網頁的超連結,那麼它就可以爬到另一張網上來獲取資料。...