如何利用Scrapy爬蟲框架抓取網(wǎng)頁全部文章信息(上篇)
前一階段我們已經(jīng)實現(xiàn)了通過Scrapy抓取某一具體網(wǎng)頁頁面的具體信息,關(guān)于Scrapy爬蟲框架中meta參數(shù)的使用示例演示(上)、關(guān)于Scrapy爬蟲框架中meta參數(shù)的使用示例演示(下),但是未實現(xiàn)對所有頁面的依次提取。首先我們理一下爬取思路,大致思想是:當(dāng)獲取到第一個頁面的URL之后,爾后將第二頁的URL發(fā)送給Scrapy,讓Scrapy去自動下載該網(wǎng)頁的信息,之后通過第二頁的URL繼續(xù)獲取第三頁的URL,由于每一頁的網(wǎng)頁結(jié)構(gòu)是一致的,所以通過這種方式如此反復(fù)進(jìn)行迭代,便可以實現(xiàn)整個網(wǎng)頁中的信息提取。其具體的實現(xiàn)過程將通過Scrapy框架來進(jìn)行實現(xiàn),具體的教程如下。
/具體實現(xiàn)/
1、首先URL不再是某一篇具體文章的URL了,而是所有文章列表的URL,如下圖所示,將鏈接放到start_urls里邊,如下圖所示。
2、接下來我們將需要更改parse()函數(shù),在這個函數(shù)中我們需要實現(xiàn)兩件事情。
其一是獲取某一頁面所有文章的URL并對其進(jìn)行解析,獲取每一篇文章里的具體網(wǎng)頁內(nèi)容,其二是獲取下一個網(wǎng)頁的URL并交給Scrapy進(jìn)行下載,下載完成之后再交給parse()函數(shù)。
有了之前的Xpath和CSS選擇器基礎(chǔ)知識之后,獲取網(wǎng)頁鏈接URL就變得相對簡單了。
3、分析網(wǎng)頁結(jié)構(gòu),使用網(wǎng)頁交互工具,我們可以很快的發(fā)現(xiàn)每一個網(wǎng)頁有20篇文章,即20個URL,而且文章列表都存在于id="archive"這個標(biāo)簽下面,之后像剝洋蔥一樣去獲取我們想要的URL鏈接。

4、點開下拉三角,不難發(fā)現(xiàn)文章詳情頁的鏈接藏的不深,如下圖圈圈中所示。

5、根據(jù)標(biāo)簽我們按圖索驥,加上選擇器利器,獲取URL猶如探囊取物。在cmd中輸入下圖命令,以進(jìn)入shell調(diào)試窗口,事半功倍。再次強(qiáng)調(diào),這個URL是所有文章的網(wǎng)址,而不是某一篇文章的URL,不然后面你調(diào)試半天都不會有結(jié)果的。

6、根據(jù)第四步的網(wǎng)頁結(jié)構(gòu)分析,我們在shell中寫入CSS表達(dá)式,并進(jìn)行輸出,如下圖所示。其中a::attr(href)的用法很巧妙,也是個提取標(biāo)簽信息的小技巧,建議小伙伴們在提取網(wǎng)頁信息的時候可以經(jīng)常使用,十分方便。

至此,第一頁的所有文章列表的URL已經(jīng)獲取到了。提取到URL之后,如何將其交給Scrapy去進(jìn)行下載呢?下載完成之后又如何調(diào)用我們自己定義的解析函數(shù)呢?
欲知后事如何,且聽下一篇文章分解。
/小結(jié)/
本文主要介紹了Scrapy爬蟲框架抓取其中某個網(wǎng)頁數(shù)據(jù)的理論,為后面抓取全網(wǎng)數(shù)據(jù)埋下伏筆,更精彩的操作在下篇文章奉上,希望對大家的學(xué)習(xí)有幫助。
想學(xué)習(xí)更多關(guān)于Python的知識,可以參考學(xué)習(xí)網(wǎng)址:http://pdcfighting.com/,點擊閱讀原文,可以直達(dá)噢~