為什麼那麼多人喜歡用urllib和正則,而不用更加方便的requests和BeautifulSoup?

最近在學爬蟲,發現很多人都在用urlib加正則的方式做爬蟲,所以有點不明白。我雖然我一開始接觸的也是urlib加正則的教程,但後來看到requests和BeautilfulSoup那簡潔的語法之後就果斷放棄了前者。

現在我用requests加BeautifulSoup做一些簡單的爬蟲感覺特順手(目前在做分析知乎用戶關係的爬蟲),但是我加了好幾個python爬蟲群,發現用這兩個庫的人實在是太少了,大部分都在用urilb和Scrapy框架。有點找不到組織的感覺……

(其實當初我也看過一點Scrapy的教程,但由於它不支持python3所以我就沒去學。)


1遇到過一些結構錯誤的網頁,bs無法正確解析,只能上正則

2bs強在html文檔節點結構的選取和構建,但有時候更多的是需要基於某種演算法對節點內容進行處理,也得上正則

3當你需求很多而自己難以駕馭時,用scrapy來作為橋樑連接,安置各個功能點,是一個很好的項目掌控方法


對於beautifulsoup和lxml:前者使用的是正則表達式來實現的,可以看它源碼實現,對於lxml,使用的是xml節點的查找,速度而言,lxml是由於beautifulsoup,而且更加通用。

參看:

python 下使用beautifulsoup還是lxml ?

至於requests和urllib2,要更大的可定製性,就用URLlib2。


BS內部的實現就是用regex的

跑一下題 更推薦lxml


沒在爬蟲太專研。

+ 個人也蠻喜歡requests庫的,但是requests庫多是在請求上做動作,在一些場景下沒有提供對應的功能,我覺得有點遺憾。按效率來講requests只是更human的庫,不如其直接;

+ 關於抓信息的,正則和bs都是選擇吧,不過我都不喜歡,為什麼題主不試試 pquery呢,用完你就覺得BS也不是更好的。

很多情況下只是因為人第一次接觸了某些庫和熟悉哪些庫就去用了,畢竟達成目的才是最終的。很多情況下,自己所認為的好的庫其實也會有更好的,只是沒有接觸到而已。譬如 ujson 比 json好等等


urllib+正則:無第三方依賴
requests+BeautifulSoup:library
scrapy:框架

從上往下抽象程度增加,方便程度增加。「路怎麼走,你們自己選啊。」


我覺得可能是因為並不是所有網頁都寫得很正規,比如不同信息相同的標籤卻沒有用id或class區分

&

價格:××&

…………………………………………

&

數量:××&

這種網頁很難用bs精確獲取到對應數據,用正則的話就很容易。


辣雞bs毀我青春,把扒下來的頁面打斷腿了,可是我就是要腿的啊。浪費我一天時間~


beautifulsoup雖好,但樓主似乎沒有遇到過一些bs不能按照網頁源碼架構完全爬取下來的頁面,或者說網頁有些部分的內容它實際是通過js動態生成的,我們從網頁源碼並不能簡單得看出來。舉個例子吧,給個網頁樓主看下遊戲_百度軟體中心 這個是百度軟體中心其中的一頁,樓主可以看看直接查看網頁源碼和bs實際抓取的差別(透露下,實際就是軟體列表li部分沒能被bs抓取到,實際是放到js裡面去了,我也不知道這算不算是反爬蟲的一種實例)像這種情況,最終還是只能通過正則表達式來匹配獲取你需要的東西,比如每個軟體的下載地址。


原來我也是利用urllib和urllib2加上regex, 後來學著用BS,requests和lxml。

但是有時候需要從網頁非常地簡單地上獲得一些結構化較強的信息就用正則,如果匹配複雜,就用BS解析(然而BS常常把網頁解析的缺胳膊少腿……)

所以說,方法有很多,也不必非要說什麼好不好。


其實最終是目的,採集到自己的數據就行,然,我和你一樣在用requests和beautifulsoup


python新手,和你有相反的疑惑,感覺用第三方的庫的人比較多。自己用得最多的還是正則和urllib2urllib,沒覺得有什麼不好,為什麼要用requests?


推薦閱讀:

本人精通c++ ,請問自學python哪本書好一點?
如何用三個月學會python?
最好的Python入門教材是哪本?
Python 哪些可以代替遞歸的演算法?

TAG:Python | beautifulsoup | Python入門 | requests |