還在焦頭爛額裸寫Scrapy?這個神器讓你90秒內配好一個爬蟲
背景

爬蟲是一件有趣的事情,讓你可以通過爬蟲程序自動化的將網上的信息抓取下來,免去了很多人工操作。在一些優質爬蟲框架出來之前,開發者們還是通過簡單的網絡請求+網頁解析器的方式來開發爬蟲程序,例如 Python 的 requests + BeautifulSoup,高級一點的爬蟲程序還會加入數據儲存的模塊,例如 MySQL、MongoDB。這種方式開發效率低,穩定性不佳,要開發好一個完備的、生產可用的爬蟲可能需要好幾個小時。我將這種方式稱作 非框架爬蟲。
2011 年,基于 Twisted 編寫的 scrapy 爬蟲框架橫空出世,突然被大眾熟知,成為了首屈一指的全能的高性能爬蟲異步框架。scrapy 抽象出了幾個核心模塊,讓開發者將主要注意力放在爬蟲抓取邏輯上,而不用管數據下載、頁面解析、任務調度等比較繁瑣的模塊。開發好一個生產可用的 Scrapy 爬蟲,簡單的可能只需要十幾分鐘,復雜的可能需要 1 小時以上。當然,我們還有其他很多優秀框架,例如 PySpider、Colly 等。我將這種爬蟲稱作 框架爬蟲。框架爬蟲解放了生產力,現在很多企業將框架爬蟲改造后應用在生產環境中,大規模抓取數據。
然而,對于需要抓成百上千個網站的爬蟲需求來說,框架爬蟲可能就有些心有余而力不足了,編寫爬蟲成了體力活。例如,如果平均開發一個框架爬蟲需要 20 分鐘,如果一個全職爬蟲開發工程師每天工作 8 個小時,那么開發 1000 個網站就需要 20000 分鐘,333 個小時,42 個工作日,近 2 個月。當然,我們可以雇傭 10 個全職爬蟲開發工程師,但這同樣需要 4 個工作日才能完成(如下圖)。
這同樣是比較低效的。為了克服這個效率問題,可配置爬蟲 應運而生。
可配置爬蟲介紹
可配置爬蟲(Configurable Spider) 正如其名字表示的,就是可以配置抓取規則的爬蟲。可配置爬蟲是一種高度抽象的爬蟲程序,開發人員不用編寫爬蟲代碼,只需要將需要抓取網頁地址、字段、屬性寫在配置文件或數據庫中,讓特殊的爬蟲程序根據配置去抓取數據。可配置爬蟲將爬蟲代碼進一步抽象成了配置信息,簡化了爬蟲開發的流程。爬蟲開發者只需要做相應的配置就可以完成爬蟲的開發。因此,開發者可以通過可配置爬蟲,大規模的編寫爬蟲程序(如下圖)。
這樣的方式讓抓取成百上千的網站成了可能,一個熟練的爬蟲配置員一天可以配置 1000 個新聞網站的爬蟲。這對于有輿情監控需求的企業來說非常重要,因為可配置爬蟲提高了生產力,讓單位工作時間成本降低,提升了開發效率,方便后續的輿情分析和人工智能產品開發。很多企業都是自己研發的可配置爬蟲(可能叫法會有些不一樣,但實質是一個東西),然后雇傭一些爬蟲配置員專門負責配置爬蟲。
市面上免費開源的可配置爬蟲框架并不多。比較早的有微軟大神崔慶才開發的 Gerapy,屬于一個爬蟲管理平臺,能夠根據配置規則生成 Scrapy 項目文件。另一個比較新的可配置爬蟲框架是 Crawlab(其實 Crawlab 不是可配置爬蟲框架,而是一個靈活度很高的爬蟲管理平臺),在 v0.4.0 中發布了可配置爬蟲。另外還有一個基于 Golang 的開源框架 Ferret ,很有意思,編寫爬蟲跟寫 SQL 一樣簡單。其他還有一些商業產品,但據用戶反饋后都覺得專業度不高,不能滿足生產需求。
可配置爬蟲的誕生,主要是爬蟲的模式比較單一,無非就是列表頁+詳情頁的組合(如下圖),或者僅僅列表頁。當然還有稍微復雜一點的通用爬蟲,這些也可以通過規則配置來完成。
Crawlab 可配置爬蟲
我們今天主要介紹的是 Crawlab 的可配置爬蟲。我們之前在 這篇文章 中有所介紹,但并沒有深入講解如何應用到實戰中。今天,我們著重講解一下。如果對 Crawlabb 的可配置爬蟲比較陌生,請參考可配置爬蟲的 文檔。
可配置爬蟲實戰
百度(搜索 "Crawlab")
爬蟲地址:http://crawlab.cn/demo#/spiders/5e27d055b8f9c90019f42a83
version:?0.4.4
engine:?scrapy
start_url:?http://www.baidu.com/s?wd=crawlab
start_stage:?list
stages:
-?name:?list
is_list:?true
list_css:?""
list_xpath:?//*[contains(@class,?"c-container")]
page_css:?""
page_xpath:?//*[@id="page"]//a[@class="n"][last()]
page_attr:?href
fields:
-?name:?title
css:?""
xpath:?.//h3/a
attr:?""
next_stage:?""
remark:?""
-?name:?url
css:?""
xpath:?.//h3/a
attr:?href
next_stage:?""
remark:?""
-?name:?abstract
css:?""
xpath:?.//*[@class="c-abstract"]
attr:?""
next_stage:?""
remark:?""
settings:
ROBOTSTXT_OBEY:?"false"
USER_AGENT:?Mozilla/5.0?(Macintosh;?Intel?Mac?OS?X?10_14_6)?AppleWebKit/537.36?(KHTML,
like?Gecko)?Chrome/78.0.3904.108?Safari/537.36
SegmentFault(最新文章)
爬蟲地址:http://crawlab.cn/demo#/spiders/5e27d116b8f9c90019f42a87
version:?0.4.4
engine:?scrapy
start_url:?https://segmentfault.com/newest
start_stage:?list
stages:
-?name:?list
is_list:?true
list_css:?.news-list?>?.news-item
list_xpath:?""
page_css:?""
page_xpath:?""
page_attr:?""
fields:
-?name:?title
css:?h4.news__item-title
xpath:?""
attr:?""
next_stage:?""
remark:?""
-?name:?url
css:?.news-img
xpath:?""
attr:?href
next_stage:?""
remark:?""
-?name:?abstract
css:?.article-excerpt
xpath:?""
attr:?""
next_stage:?""
remark:?""
settings:
ROBOTSTXT_OBEY:?"false"
USER_AGENT:?Mozilla/5.0?(Macintosh;?Intel?Mac?OS?X?10_14_6)?AppleWebKit/537.36?(KHTML,
like?Gecko)?Chrome/78.0.3904.108?Safari/537.36
亞馬遜中國(搜索"手機")
爬蟲地址:http://crawlab.cn/demo#/spiders/5e27e157b8f9c90019f42afb
version:?0.4.4
engine:?scrapy
start_url:?https://www.amazon.cn/s?k=%E6%89%8B%E6%9C%BA&__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&ref=nb_sb_noss_2
start_stage:?list
stages:
-?name:?list
is_list:?true
list_css:?.s-result-item
list_xpath:?""
page_css:?.a-last?>?a
page_xpath:?""
page_attr:?href
fields:
-?name:?title
css:?span.a-text-normal
xpath:?""
attr:?""
next_stage:?""
remark:?""
-?name:?url
css:?.a-link-normal
xpath:?""
attr:?href
next_stage:?""
remark:?""
-?name:?price
css:?""
xpath:?.//*[@class="a-price-whole"]
attr:?""
next_stage:?""
remark:?""
-?name:?price_fraction
css:?""
xpath:?.//*[@class="a-price-fraction"]
attr:?""
next_stage:?""
remark:?""
-?name:?img
css:?.s-image-square-aspect?>?img
xpath:?""
attr:?src
next_stage:?""
remark:?""
settings:
ROBOTSTXT_OBEY:?"false"
USER_AGENT:?Mozilla/5.0?(Macintosh;?Intel?Mac?OS?X?10_14_6)?AppleWebKit/537.36?(KHTML,
like?Gecko)?Chrome/78.0.3904.108?Safari/537.36
V2ex
爬蟲地址:http://crawlab.cn/demo#/spiders/5e27dd67b8f9c90019f42ad9
version:?0.4.4
engine:?scrapy
start_url:?https://v2ex.com/
start_stage:?list
stages:
-?name:?list
is_list:?true
list_css:?.cell.item
list_xpath:?""
page_css:?""
page_xpath:?""
page_attr:?href
fields:
-?name:?title
css:?a.topic-link
xpath:?""
attr:?""
next_stage:?""
remark:?""
-?name:?url
css:?a.topic-link
xpath:?""
attr:?href
next_stage:?detail
remark:?""
-?name:?replies
css:?.count_livid
xpath:?""
attr:?""
next_stage:?""
remark:?""
-?name:?detail
is_list:?false
list_css:?""
list_xpath:?""
page_css:?""
page_xpath:?""
page_attr:?""
fields:
-?name:?content
css:?""
xpath:?.//*[@class="markdown_body"]
attr:?""
next_stage:?""
remark:?""
settings:
AUTOTHROTTLE_ENABLED:?"true"
ROBOTSTXT_OBEY:?"false"
USER_AGENT:?Mozilla/5.0?(Macintosh;?Intel?Mac?OS?X?10_14_6)?AppleWebKit/537.36?(KHTML,
like?Gecko)?Chrome/79.0.3945.117?Safari/537.36
36氪
爬蟲地址:http://crawlab.cn/demo#/spiders/5e27ec82b8f9c90019f42b59
version:?0.4.4
engine:?scrapy
start_url:?https://36kr.com/information/web_news
start_stage:?list
stages:
-?name:?list
is_list:?true
list_css:?.kr-flow-article-item
list_xpath:?""
page_css:?""
page_xpath:?""
page_attr:?""
fields:
-?name:?title
css:?.article-item-title
xpath:?""
attr:?""
next_stage:?""
remark:?""
-?name:?url
css:?body
xpath:?""
attr:?href
next_stage:?detail
remark:?""
-?name:?abstract
css:?body
xpath:?""
attr:?""
next_stage:?""
remark:?""
-?name:?author
css:?.kr-flow-bar-author
xpath:?""
attr:?""
next_stage:?""
remark:?""
-?name:?time
css:?.kr-flow-bar-time
xpath:?""
attr:?""
next_stage:?""
remark:?""
-?name:?detail
is_list:?false
list_css:?""
list_xpath:?""
page_css:?""
page_xpath:?""
page_attr:?""
fields:
-?name:?content
css:?""
xpath:?.//*[@class="common-width?content?articleDetailContent?kr-rich-text-wrapper"]
attr:?""
next_stage:?""
remark:?""
settings:
ROBOTSTXT_OBEY:?"false"
USER_AGENT:?Mozilla/5.0?(Macintosh;?Intel?Mac?OS?X?10_14_6)?AppleWebKit/537.36?(KHTML,
like?Gecko)?Chrome/78.0.3904.108?Safari/537.36
實戰爬蟲一覽
總結
要注意的是,不遵守 robots.txt 可能會造成法律風險,本文的實戰爬蟲均為學習交流用,切勿作為生產環境,任何濫用者自行承擔法律責任。
參考
Github: https://github.com/crawlab-team/crawlab
Demo: http://crawlab.cn/demo
文檔: http://docs.crawlab.cn/
Go Scrapy Python
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。