想要用 python 做爬蟲, 是使用 scrapy架構還是用 requests, bs4 等庫?

來源:互聯網
上載者:User
想要用python(python3)實現一個爬蟲,來完成自己的一些需求。
參考網上的資料,發現對自己而言有兩種待選的方案:
1. 使用scrapy架構
都說該架構功能強大,實現簡單。但是不相容python3,
2. 使用requests 和 bs4等庫來自己實現
相比方案一,可能要自己多寫好多代碼,以及效能可能不如開源的架構。

由於自己學習的python3(好多人說python3 才是趨勢,所以沒有學習python2),如果採用方案一,會有scrapy對python3 的支援不夠好(雖說現在scrapy官網上說對python3的支援進行中中,但不相等),希望熟悉的人回答一下 scrapy對python3的支援到底如何?; 如果採用方案二,那麼想問 ,如果我想要利用 requests, bs4等庫 實現一個簡單版的 scrapy, 困難有多大,需要學習那些東西?

回複內容:

真的不要糾結2還是3,對於爬蟲來講,感覺不到區別,這些都不是事兒,除了編碼和print。
而且requests和bs4都支援吧(待我確定下)。

那什麼是事兒呢?
1 限制ip
用requests代理,買代理,或者網上免費代理
2 偽裝成瀏覽器
requests切換user agent
3 先登入,儲存cookies
requests用session先post拿到cookies,再爬
4 URL參數太多,不明白什麼意思
webdriver和phantomjs
5 JavaScript和ajax問題
瀏覽器f12分析請求規律,直接requests請求。或者用webdriver和phantomjs,如果用scrapy的話,用scrapyjs
6 爬的太慢
多線程,別說gil,一般是網路io慢,cpu等io
7 還是慢
scrapy非同步(做過幾個項目了,挺好用的),pyspider(這個支援Python3)
8 還是慢
分布式(暫時還沒涉及),redis,scrapyd
9 驗證碼
對不起,幫不了你。簡單的可以pil,灰階二值化切割識別
10 如果你想自己實現非同步請求的話
grequests不錯



爪機回複,待補充。
ps 不知不覺自己用Python有一段時間了,寫過爬蟲,web,最近用Python掙了點錢前幾天剛剛用幾個庫自己寫了一個簡單的爬蟲,不過因為我是用的Python2.7,所以可能有些不同,先說說我的體驗

2個多月前學習了Scrapy架構,之後自己寫了幾個爬蟲,基本是BaseSpider,CrawlSpider,當時感覺寫一個爬蟲很簡單,有一個現成的架構擺在那裡,只要自己定義要抓取的類和抓取的函數就行了

之後由於其他事情Python學習斷了一個多月,之後看《Python核心編程》,講到爬蟲,就想到為什麼不自己寫一個,於是開始做。

這時候才體會到寫爬蟲並不像自己想的那麼簡單,得自己定義諸如儲存資料類,同網域名稱保留函數,資料去重等一系列問題,最後用兩種方案寫出來,一個是定義一個類,一個是只用函數,不過二者基本上是類似的,當然還有一系列問題沒有解決,目前的功能是根據輸入的網址和爬取深度來爬取網址,不過基本雛形出來了,以後慢慢解決

個人建議先學習Scrapy,我能感受到的最大的好處就是學習了正則,以至於後來自己寫爬蟲提取網址直接用正則了,其他的什麼庫都沒有用

學完Scrapy後,試著自己寫一個爬蟲,因為這時候你對爬蟲的基本操作流程已經有所掌握,照貓畫虎還不會麼,安題主所說,用request和bs4庫是肯定不夠的,不過不要急著學庫,到時候需要了再去查(我個人是喜歡用正則,所以我自己寫的爬蟲只是用了re,當然不可否認上面兩個也很強大,個人喜好而已)寫的過程肯定會遇到問題,比如資料存放,去重,抓取,一個一個解決,對提升自己絕對有好處

看著自己寫的爬蟲跑網頁,也是很有成就感的不要糾結python2 還是python3 的問題。
學習編程不光是學習文法,是學習計算思維,編程思路。python2和python3 差別不是很大。

看你的情況,建議先學習標準庫或requests 這個庫學習爬蟲,先學會抓包,類比post、get ,自動填表等基本技能,再學習scrapy架構。

建議看看 黃哥主講的python爬蟲聯想詞視頻,學習一下基礎知識。

搜尋“python爬蟲聯想詞視頻” 有播放地址。

加油!先去試試urllib和urllib2,熟悉一下爬蟲的基本思維。然後熟悉了大概之後看看requests,這也是urllib\urllib2封裝的,熟悉抓包和分析頁面成分,瞭解POST、GET都是什麼原理和實用,試著自己去寫幾個小站的爬蟲,當你不滿足於此的時候可以去擼Scrapy了,但是入坑之前推薦樓主先去瞭解Python的多執行緒,目前我正在死磕中。。看你使用情境。
如果你的爬蟲是玩玩,練練手。或者是對某一網站請求並發量不大的時候,可以用scrapy。
如果你的爬蟲對某一網站請求很頻繁,量很大時,我傾向於使用requests bs re。

爬蟲的商務邏輯很簡單。 重點是反爬!反爬!反爬!


scrapy優勢在於抽象了業務,讓你通過配置你需要的資料格式,幫你快速擷取結果。這在請求量很小的時候還算方便,但當請求量一大起來,必然會遇到反爬機制各種封你,對於反爬scrapy沒提供特別有效處理機制。

另外往往擷取有效資料的操作,用BeautifulSoup+re就搞定了,而為了使用scrapy不得不配置的一堆東西反倒顯得繁瑣了。
既然所有反爬的處理都需要自己弄,這樣看來scrapy的優勢其實已經很小了,所以我建議requests bs re做。requests和bs4庫還是相當強大的,簡單寫個幾十行,再配上代理和多進程/多線程,就能抓取相當可觀的資料。題主如果想入門這兩個庫可以在網易雲課堂上搜一個有關python爬蟲的課程,具體名字忘了,但是個人認為講的還不錯。另外就是善用文檔,一切說明都在文檔裡,百度一搜就有。
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.