python有哪些常見的,好用的爬蟲框架

由於項目需求收集並使用過一些爬蟲相關庫,做過一些對比分析。以下是我接觸過的一些庫:

Beautiful Soup。名氣大,整合了一些常用爬蟲需求。缺點:不能載入JS。
Scrapy。看起來很強大的爬蟲框架,可以滿足簡單的頁面爬取(比如可以明確獲知url pattern的情況)。用這個框架可以輕松爬下來如亞馬遜商品信息之類的數據。但是對於稍微復雜一點的頁面,如weibo的頁面信息,這個框架就滿足不了需求了。
mechanize。優點:可以載入JS。缺點:文檔嚴重缺失。不過通過官方的example以及人肉嘗試的方法,還是勉強能用的。
selenium。這是一個調用瀏覽器的driver,通過這個庫你可以直接調用瀏覽器完成某些操作,比如輸入驗證碼。
cola。一個分布式爬蟲框架。項目整體設計有點糟,模塊間耦合度較高,不過值得借鑒。

以下是我的一些實踐經驗:

對於簡單的需求,比如有固定pattern的信息,怎麼搞都是可以的。
對於較為復雜的需求,比如爬取動態頁面、涉及狀態轉換、涉及反爬蟲機制、涉及高並發,這種情況下是很難找到一個契合需求的庫的,很多東西只能自己寫。

至於題主提到的:
還有,採用現有的Python爬蟲框架,相比與直接使用內置庫,優勢在哪?因為Python本身寫爬蟲已經很簡單了。
third party library可以做到built-in library做不到或者做起來很困難的事情,僅此而已。還有就是,爬蟲簡不簡單,完全取決於需求,跟Python是沒什麼關系的。

❷ 如何設計一個python分布式爬蟲系統

你都沒想明白為什麼要分布式
========================
我還是認真答一下吧,爬蟲這種東西在大批量抓去時主要有下面幾個量變引發質變的挑戰:
1. 出口IP數量,主要是考慮防止被封禁,帶寬反而不是大問題,這個問題可以通過搭建NAT出口集群,或者單機多IP的方式實現
2. 本地埠號耗盡,由於爬蟲是服務端編程不太常見的主動發起連接的應用,在普通只有一個IP綁定的機器上會受到65535的限制(一般在50000多就會受到限制)
3. 大容量存儲的需求,一般都是通過開源或者自己研發的分布式存儲系統來實現,像谷歌(GFS)和網路(百靈)都是自研,這里就不展開說了
4. 動態網頁的支持,像京東這種網站,內容都是通過類似Facebook的bigpipe一樣動態載入的,直接像curl這樣抓取看到的頁面幾乎是空白的,這就要求爬蟲能模擬JS的運行,這方面有很多基於v8引擎的開源項目:
CasperJS, a navigation scripting and testing utility for PhantomJS and SlimerJS
PhantomJS | PhantomJS
由於這個需求,爬蟲成了CPU密集型的應用了,分布式的需求也就有了
單機爬蟲的主要難點在的非同步非阻塞網路編程,老生常談了。先暫時寫這么多吧

❸ 如何評價慕課網課程《Python分布式爬蟲打造搜索引擎 》

爬蟲本質上不需要分布式。因為你要爬一個網站通常5-10個線程足夠了,再多就是對網站壓力測試了。你只需要將任務分配到不同的機器上,然後各運行各自己的,結果合並一下就可以。這個與nutch人map,rese也沒有什麼差別。只是手工分,手工合並。當然也可以用腳本分,腳本合並,腳本遠程啟動。有一個遠程式控制制模塊,似乎叫rpy。很簡單,很容易上手。可以遠程式控制制一個模塊。資料庫用postgresql不是很好。因為爬行結果放在關系型資料庫里太吃力。特別是網頁內容。通常是URL放在redis里。內容放在文件系統里,你可以用hadoop+hdfs+thrift方案放在hadoop里。如果使用了hadoop,就乾脆模仿nutch的流程,把python腳本也交給hadoop去管理好了。至於控制與通信這個都讓hadoop來處理好了。當然我個人覺著rpy方式更簡單。裡面控制與通信都是現成的。10分鍾就學會了。還是回到原來的說法,大部分情況下,單機多線程跑爬蟲足夠用了。不需要分布式。而且效率甚至比分布式更高。

❹ 各位能不能給推薦一個python的分布式爬蟲框架

爬蟲本質上不需要分布式。因為你要爬一個網站通常5-10個線程足夠了,再多就是對網站壓力測試了。

你只需要將任務分配到不同的機器上,然後各運行各自己的,結果合並一下就可以。 這個與nutch人map, rese也沒有什麼差別。只是手工分,手工合並。當然也可以用腳本分,腳本合並,腳本遠程啟動。有一個遠程式控制制模塊,似乎叫rpy。很簡單,很容易上手。可以遠程式控制制一個模塊。

資料庫用postgresql不是很好。因為爬行結果放在關系型資料庫里太吃力。特別是網頁內容。通常是URL放在redis里。 內容放在文件系統里,你可以用hadoop+hdfs+thrift方案放在hadoop里。

如果使用了hadoop,就乾脆模仿nutch的流程,把python腳本也交給hadoop去管理好了。
至於控制與通信這個都讓hadoop來處理好了。

當然我個人覺著rpy方式更簡單。 裡面控制與通信都是現成的。10分鍾就學會了。

還是回到原來的說法,大部分情況下,單機多線程跑爬蟲足夠用了。 不需要分布式。而且效率甚至比分布式更高。

❺ 如何用python寫爬蟲 知乎

學習

基本的爬蟲工作原理
基本的http抓取工具,scrapy
Bloom Filter: Bloom Filters by Example
如果需要大規模網頁抓取,你需要學習分布式爬蟲的概念。其實沒那麼玄乎,你只要學會怎樣維護一個所有集群機器能夠有效分享的分布式隊列就好。最簡單的實現是python-rq: https://github.com/nvie/rq
rq和Scrapy的結合:darkrho/scrapy-redis · GitHub
後續處理,網頁析取(grangier/python-goose · GitHub),存儲(Mongodb)

❻ Python爬蟲可以爬取什麼

Python爬蟲可以爬取的東西有很多,Python爬蟲怎麼學?簡單的分析下:

如果你仔細觀察,就不難發現,懂爬蟲、學習爬蟲的人越來越多,一方面,互聯網可以獲取的數據越來越多,另一方面,像 Python這樣的編程語言提供越來越多的優秀工具,讓爬蟲變得簡單、容易上手。

利用爬蟲我們可以獲取大量的價值數據,從而獲得感性認識中不能得到的信息,比如:

知乎:爬取優質答案,為你篩選出各話題下最優質的內容。

淘寶、京東:抓取商品、評論及銷量數據,對各種商品及用戶的消費場景進行分析。

安居客、鏈家:抓取房產買賣及租售信息,分析房價變化趨勢、做不同區域的房價分析。

拉勾網、智聯:爬取各類職位信息,分析各行業人才需求情況及薪資水平。

雪球網:抓取雪球高回報用戶的行為,對股票市場進行分析和預測。

爬蟲是入門Python最好的方式,沒有之一。Python有很多應用的方向,比如後台開發、web開發、科學計算等等,但爬蟲對於初學者而言更友好,原理簡單,幾行代碼就能實現基本的爬蟲,學習的過程更加平滑,你能體會更大的成就感。

掌握基本的爬蟲後,你再去學習Python數據分析、web開發甚至機器學習,都會更得心應手。因為這個過程中,Python基本語法、庫的使用,以及如何查找文檔你都非常熟悉了。

對於小白來說,爬蟲可能是一件非常復雜、技術門檻很高的事情。比如有人認為學爬蟲必須精通 Python,然後哼哧哼哧系統學習 Python 的每個知識點,很久之後發現仍然爬不了數據;有的人則認為先要掌握網頁的知識,遂開始 HTMLCSS,結果入了前端的坑,瘁……

但掌握正確的方法,在短時間內做到能夠爬取主流網站的數據,其實非常容易實現,但建議你從一開始就要有一個具體的目標。

在目標的驅動下,你的學習才會更加精準和高效。那些所有你認為必須的前置知識,都是可以在完成目標的過程中學到的。這里給你一條平滑的、零基礎快速入門的學習路徑。

1.學習 Python 包並實現基本的爬蟲過程

2.了解非結構化數據的存儲

3.學習scrapy,搭建工程化爬蟲

4.學習資料庫知識,應對大規模數據存儲與提取

5.掌握各種技巧,應對特殊網站的反爬措施

6.分布式爬蟲,實現大規模並發採集,提升效率

學習 Python 包並實現基本的爬蟲過程

大部分爬蟲都是按「發送請求——獲得頁面——解析頁面——抽取並儲存內容」這樣的流程來進行,這其實也是模擬了我們使用瀏覽器獲取網頁信息的過程。

Python中爬蟲相關的包很多:urllib、requests、bs4、scrapy、pyspider 等,建議從requests+Xpath 開始,requests 負責連接網站,返回網頁,Xpath 用於解析網頁,便於抽取數據。

如果你用過 BeautifulSoup,會發現 Xpath 要省事不少,一層一層檢查元素代碼的工作,全都省略了。這樣下來基本套路都差不多,一般的靜態網站根本不在話下,豆瓣、糗事網路、騰訊新聞等基本上都可以上手了。

當然如果你需要爬取非同步載入的網站,可以學習瀏覽器抓包分析真實請求或者學習Selenium來實現自動化,這樣,知乎、時光網、貓途鷹這些動態的網站也可以迎刃而解。

了解非結構化數據的存儲

爬回來的數據可以直接用文檔形式存在本地,也可以存入資料庫中。

開始數據量不大的時候,你可以直接通過 Python 的語法或 pandas 的方法將數據存為csv這樣的文件。

當然你可能發現爬回來的數據並不是干凈的,可能會有缺失、錯誤等等,你還需要對數據進行清洗,可以學習 pandas 包的基本用法來做數據的預處理,得到更干凈的數據。

學習 scrapy,搭建工程化的爬蟲

掌握前面的技術一般量級的數據和代碼基本沒有問題了,但是在遇到非常復雜的情況,可能仍然會力不從心,這個時候,強大的 scrapy 框架就非常有用了。

scrapy 是一個功能非常強大的爬蟲框架,它不僅能便捷地構建request,還有強大的 selector 能夠方便地解析 response,然而它最讓人驚喜的還是它超高的性能,讓你可以將爬蟲工程化、模塊化。

學會 scrapy,你可以自己去搭建一些爬蟲框架,你就基本具備爬蟲工程師的思維了。

學習資料庫基礎,應對大規模數據存儲

爬回來的數據量小的時候,你可以用文檔的形式來存儲,一旦數據量大了,這就有點行不通了。所以掌握一種資料庫是必須的,學習目前比較主流的 MongoDB 就OK。

MongoDB 可以方便你去存儲一些非結構化的數據,比如各種評論的文本,圖片的鏈接等等。你也可以利用PyMongo,更方便地在Python中操作MongoDB。

因為這里要用到的資料庫知識其實非常簡單,主要是數據如何入庫、如何進行提取,在需要的時候再學習就行。

掌握各種技巧,應對特殊網站的反爬措施

當然,爬蟲過程中也會經歷一些絕望啊,比如被網站封IP、比如各種奇怪的驗證碼、userAgent訪問限制、各種動態載入等等。

遇到這些反爬蟲的手段,當然還需要一些高級的技巧來應對,常規的比如訪問頻率控制、使用代理IP池、抓包、驗證碼的OCR處理等等。

往往網站在高效開發和反爬蟲之間會偏向前者,這也為爬蟲提供了空間,掌握這些應對反爬蟲的技巧,絕大部分的網站已經難不到你了.

分布式爬蟲,實現大規模並發採集

爬取基本數據已經不是問題了,你的瓶頸會集中到爬取海量數據的效率。這個時候,相信你會很自然地接觸到一個很厲害的名字:分布式爬蟲。

分布式這個東西,聽起來很恐怖,但其實就是利用多線程的原理讓多個爬蟲同時工作,需要你掌握 Scrapy + MongoDB + Redis 這三種工具。

Scrapy 前面我們說過了,用於做基本的頁面爬取,MongoDB 用於存儲爬取的數據,Redis 則用來存儲要爬取的網頁隊列,也就是任務隊列。

所以有些東西看起來很嚇人,但其實分解開來,也不過如此。當你能夠寫分布式的爬蟲的時候,那麼你可以去嘗試打造一些基本的爬蟲架構了,實現一些更加自動化的數據獲取。

你看,這一條學習路徑下來,你已然可以成為老司機了,非常的順暢。所以在一開始的時候,盡量不要系統地去啃一些東西,找一個實際的項目(開始可以從豆瓣、小豬這種簡單的入手),直接開始就好。

因為爬蟲這種技術,既不需要你系統地精通一門語言,也不需要多麼高深的資料庫技術,高效的姿勢就是從實際的項目中去學習這些零散的知識點,你能保證每次學到的都是最需要的那部分。

當然唯一麻煩的是,在具體的問題中,如何找到具體需要的那部分學習資源、如何篩選和甄別,是很多初學者面臨的一個大問題。

以上就是我的回答,希望對你有所幫助,望點贊。

❼ python分布式爬蟲是什麼意思

就是一群電腦去對付一台電腦。
舉個例子,你用主機 C 去爬網站S,S發現你爬數據太快,認為你不是人在操作,於是把你 IP 封了,你不是很郁悶么?於是,分布式爬蟲上場了,我用C1,C2,C3,…………N 台電腦一起向S 發起爬數據,每台領取一份任務,降低爬的頻率,但由於 N 台是並行去爬,所以效率相當驚人,把他們爬回的數據進行拼裝就 OK 了。
分布式是個好東西。
又如,主力若想拉升股價,必須資金量很大,如果資金在一台電腦上集中拉升的話,交易所就記錄了你的 IP,日後ZJH就容易查到你。那麼主力當然會用分布式電腦來拉,把資金分散到 N 台電腦上,並且分散到 N 個帳戶上,每個帳戶上的資金低於ZJH查你的紅線。然後用分布式程序集中控制這 N 台電腦 N 個帳號的資金聯動。這樣他們看到的就是 N 台電腦上的 N 個韭菜,很難判斷他們是不是一起行動的,只有主力的程序才知道他們是一起行動的。

❽ python如何搭建分布式爬蟲呀

爬蟲本質上不需要分布式。因為你要爬一個網站通常5-10個線程足夠了,再多就是對網站壓回力測試了。

你只答需要將任務分配到不同的機器上,然後各運行各自己的,結果合並一下就可以。 這個與nutch人map, rese也沒有什麼差別。只是手工分,手工合並。當然也可以用腳本分,腳本合並,腳本遠程啟動。有一個遠程式控制制模塊,似乎叫rpy。很簡單,很容易上手。可以遠程式控制制一個模塊。

資料庫用postgresql不是很好。因為爬行結果放在關系型資料庫里太吃力。特別是網頁內容。通常是URL放在redis里。 內容放在文件系統里,你可以用hadoop+hdfs+thrift方案放在hadoop里。

如果使用了hadoop,就乾脆模仿nutch的流程,把python腳本也交給hadoop去管理好了。
至於控制與通信這個都讓hadoop來處理好了。

當然我個人覺著rpy方式更簡單。 裡面控制與通信都是現成的。10分鍾就學會了。

還是回到原來的說法,大部分情況下,單機多線程跑爬蟲足夠用了。 不需要分布式。而且效率甚至比分布式更高。

❾ 有哪些開源的分布式爬蟲解決方案

從GitHub中整理出的15個最受歡迎的Python開源框架。這些框架包括事件I/O,OLAP,Web開發,高性能網路通信,測試,爬蟲等。 Django: Python Web應用開發框架 Django 應該是最出名的Python框架,GAE甚至Erlang都有框架受它影響。Django是走大而全...

❿ 如何用Python寫一個分布式爬蟲

學習 基本的爬蟲工作原理 基本的http抓取工具,scrapy Bloom Filter: Bloom Filters by Example 如果需要大規模網頁抓取,你需要學習分布回式爬蟲的概念。其答實沒那麼玄乎,你只要學會怎樣維護一個所有集群機器能夠有效分享的分布式隊列就好