用scrpay實現列表頁詳情頁的抽取

中國的技術人員對爬蟲很感興趣,一來這東西確實有點技術含量;二來搞垃圾站作網賺要用到爬蟲:本身整個小站,用爬蟲抄襲別人的內容,掛掛外鏈,弄弄長尾seo,而後掛廣告賺錢。html

但其實咱們作的工做不全是爬蟲,更多的是內容的抽取,即web scraping。通常搜索引擎用到的爬蟲,是存取整個html頁面,而後創建索引,供用戶搜索,這叫crawling。中國通常用一個爬蟲就指代了二者,不作區分。python

作內容抽取,一般用xpath、正則表達式來定義須要抽取的內容規則,不一樣的頁面規則不相同,爬取不一樣的頁面就要建立和維護不一樣的規則,比較麻煩,除此以外還要考慮批量爬取和增量爬取的配合。web

通常作一次定向爬取,採用列表頁+詳情頁的模式比較常見,之前用過一個工具叫作webharvest,demo的例子裏直接有如何作列表頁+詳情頁的抽取,可是webharvest近四年來都沒有更新,最近一次使用發現,GUI控制界面竟然沒法打開配置文件和正常關閉,果斷放棄之。最後回到scrapy。正則表達式

scrapy是python的一個爬蟲框架,所謂框架,在於幫助你將注意力焦點放在業務邏輯上,而不是種種繁瑣的、重複的、已經有經過解決方案的技術細節,在爬蟲這塊則是:任務調度、dns緩存、網絡訪問等等。使用scrapy,你只須要指定你要爬什麼網站、爬什麼頁面、內容在頁面的什麼部位、最後的結果如何存儲,便可。api

列表頁+詳情頁的內容抽取,關鍵在於待爬取的url只是頁面頁面,如第一頁,第二頁,。。。,和詳情頁,其餘的頁面都無需考慮。而通常爬蟲的邏輯是:給定起始頁面,發起訪問,分析頁面包含的全部其餘連接,而後將這些連接放入隊列,再逐次訪問這些隊列,直至邊界條件結束。爲了針對列表頁+詳情頁這種模式,須要對連接抽取(link extractor)的邏輯進行限定。好在scrapy已經提供,關鍵是你知道這個接口,並靈活運用。緩存

rules = (Rule(SgmlLinkExtractor(allow=('category/20/index_\d+\.html'), restrict_xpaths=("//div[@class='left']"))),
		Rule(SgmlLinkExtractor(allow=('a/\d+/\d+\.html'), restrict_xpaths=("//div[@class='left']")), callback='parse_item'),
	)

Rule是在定義抽取連接的規則,上面的兩條規則分別對應列表頁的各個分頁頁面和詳情頁,關鍵點在於經過restrict_xpath來限定只從頁面特定的部分來抽取接下來將要爬取的連接。網絡

相關文章
相關標籤/搜索