用 Python 寫爬蟲時應該注意哪些坑?


如何抵禦反爬蟲機制,比如何高效抓取數據更加重要。


慢慢來。
1. 添加user-agent,header。避免一開始就被屏蔽掉。推薦用urllib2,requests(最近才用這個,發現很好用)

2. 編碼用utf-8,本地存儲的時候用codes.open 來保存中文字元

3. lxml解析的速度要比beautifulsoup快的多

4. 如果beautiful和lxml都不能抓到你想要的網頁內容,就的用最原始的方法---正則表達式,所以玩爬蟲,正則表達式基礎要好。

5.抓到返回內容如果和正常頁面不符,看看是不是跳轉了

6. 爬js 動態頁面 用 抓包獲取 提交的數據,然後post返回json格式,最好不用seliumn,卡卡卡呀

到最終,熟練了,就是 抓包,分析內容,提取內容,所以進階後可以直接用scrapy

手機碼的,後面再補充。


  • 第一個問題是如何模擬瀏覽器發起網路請求,其中包括user-agent,Cookies,等頭信息欄位。
  • 第二個問題是請求頻率的問題,服務端可以對於頻繁的請求當作爬蟲,進而被限制,因此要麼用IP代理池。
  • 第三個問題是爬取海量數據是需要用的分散式爬蟲,scrapy和scrapy-redis結合就是一種實現方式。
  • 第四個問題就是Python的編碼問題,python2中的str與unicode容易把人搞的暈頭轉向,能python3就不用python2吧

一. 一個好的網頁解釋器,python推薦BeautifulSoup
二. 良好的性能,不能太慢,當遇上網路狀況不大好的時候,慢更受不了,所以通常需要同時啟動N個網路爬蟲進行工作.使用隊列可以很好解決這個問題。優化性能常見解決方案------隊列輔助多線程。
三. 穩定性,容錯性。網路本來就存在不穩定性,連接超時,連接重置等是常見的不穩定現象,網路爬蟲程序要充分妥當地處理這些問題,保證爬蟲輸出結果的完整性。


搞爬蟲和搞反爬蟲的都是一家人!!!別自相殘殺了!!
被一家一個月連改四次的網站整怕了。每次重寫反反爬的代碼要部署的時候就又改版了。
你們出限制咱們加偽造,
出跳轉咱們跟跳轉。
出模糊數據#就是那種一堆nodisplay讓頁面源碼都是隨機的那種
咱們屏幕截圖然後圖片解析轉換
最後搞了極驗驗證碼咱們還花了八天才破解。
結果總請求數反而增加

最後。
大家都是老闆逼的,別這麼自相殘殺了。我下調速度,你放寬點。這樣也不會弄得天天開一堆分散式和搞攻擊似的。你好我好大家好。

好像歪了,不過說的是心聲啊,爬蟲的坑往往就是和對方懟著干。


這是一個好問題,我來拋個磚。

先看別人的robots. txt,先知道別人反感什麼,盡量避免。

盡量避免高頻,低調而愉快的拿數據。

注意編碼,gb2312通常用gbk更好點。

能抓js介面就盡量避免整體頁面,通常js介面的反爬策略更寬鬆友好。數據也更乾淨。

小心蜜罐,分析頁面時注意一些怪異的地方,比如不可見鏈接。


1.鏈接規則琢磨起來費勁用selenium,當時琢磨了半天如何破解鏈接後面的key,用 selenium 費勁可能移動端反爬做的差一點用android 模擬操作。琢磨鏈接規則真是蛋疼。
2. 編碼
3. 掛好代理
4.爬一半留好日誌太大的東西重爬太浪費生命,斷點繼續爬
5.能用別人寫好的就不自己寫


有些頁面喜歡使用redirect,然而requests的get和post方法中默認是直接跳轉的!很可能你就帶著錯誤的cookies和headers跳轉了,所以務必將allow_redirects參數設為false


最近爬了萬把網站,遇到的坑不多,就點小經驗:

1. 爬個別特定網站,不一定得用python寫爬蟲,多數情況wget一條命令多數網站就能爬的不錯,真的玩到自己寫爬蟲了,最終遇到的無非是如何做大做壯,怎麼做分散式爬蟲。scrapy這種價值接近0,非同步或者多線程搞抓取,選一個成熟的基於磁碟的隊列庫,kafka之類的,scrapy幫了啥?
2. http庫眾多,還有gevent庫monkey patch以後coroutine的玩這一選擇,規模千萬的話urllib3很好。
3. 對付網站的諸如登錄、ajax,這種不過是體力民工活,不展開了。
4. 速度很重要,放ec2或者國內的雲上跑,很重要的指標是你每一億網頁爬下來成本多少,爬的時候比如4核一個虛擬機節點,你能inbound貸款用足100mbps嗎。
5. beautifulsoup太慢,全網的爬,encoding的分析也要要快,c實現的chardet還行

最關鍵的,永遠是爬下來以後的信息的提取、分析、使用,就是另外一個話題了。


1.學會使用chrome瀏覽器查看通信以及查看元素格式
2.增加User-Agent, 這是最簡單的反爬措施了
3.寫爬蟲最好使用Ipython,在互動式的環境下,可以時刻了解自己問題具體出在哪裡
4.使用requests
5.用get或者post下好html之後,要確認你需要的東西html裡面有,而不是之後用ajax或者javascript載入的。
6.解析的話,BeautifulSoup不錯。對於少數非常特殊的,可以考慮用re。
7,需要大量採集數據的話,學會使用框架,比如scrapy。
進階:
加入網站需要模擬登陸,裡面使用了很多ajax或者javascript,或者反爬蟲厲害,用requests的session,注意F12查看到底發送了什麼數據。
實在不會,就使用模擬瀏覽器吧,推薦selenium,雖然速度慢點,內存多點,但是真的很省力,而且基本查不出來。
最後,爬蟲速度不要太快,加上time.sleep(1),盡量少用多線程,別人建站也不容易,(尤其是小站)你不給別人帶來很大的麻煩,別人也就睜一隻眼閉一隻眼了,否則封IP不是好玩的。


小任務pyspider,中型任務scrapy,配置好cookie,useragent,利用成熟的框架基本能避免常見的坑。


header里填哪幾個就行,哪幾個可以不用填,取決於爬的網站怎麼防爬蟲
看看網頁是不是ajax之流
網頁跳轉
編碼問題儘早自己搞清楚(最開始學python的時候就應該弄清楚)


python的編碼問題真的是很頭疼


推薦閱讀:

爬蟲如何解決500錯誤?
Python 學習完基礎語法知識後,如何進一步提高?
用Python爬網頁需要了解什麼背景知識?
python IDE 新手用什麼比較好?
為什麼Python爬蟲很少有人爬QQ空間呢?

TAG:Python | 爬蟲計算機網路 | Python入門 | Python開發 | 網頁爬蟲 |