在Scrapy中如何利用Xpath選擇器從網(wǎng)頁中采集目標(biāo)數(shù)據(jù)
這篇文章我們將通過Xpath表達(dá)式來進(jìn)行提取數(shù)據(jù),具體教程如下,仍然以之前的網(wǎng)站為例進(jìn)行說明,我們的目標(biāo)數(shù)據(jù)是標(biāo)題、發(fā)布日期、主題、正文內(nèi)容、點(diǎn)贊數(shù)、收藏?cái)?shù)、評論數(shù)等。具體的教程如下。
/具體實(shí)現(xiàn)/
1、針對標(biāo)題,在上篇文章中就有提及,其Xpath表達(dá)式有多種,任選其一即可,在scrapy shell腳本下進(jìn)行調(diào)試,得到標(biāo)題的提取方式,并寫入到爬蟲主體文件中。
2、接下來是發(fā)布日期的提取,仍然是以交互式的方式實(shí)現(xiàn)網(wǎng)頁與源碼之間的交互,如下圖所示。
3、而且標(biāo)簽“entry-meta-hide-on-mobile”具有全局唯一性,可以很方便的定位到元素。
4、根據(jù)網(wǎng)頁結(jié)構(gòu),我們可輕易的寫出發(fā)布日期的Xpath表達(dá)式,可以在scrapy shell中先進(jìn)行測試,再將選擇器表達(dá)式寫入爬蟲文件中,詳情如下圖所示。
這里有部分雜質(zhì)信息,需要利用strip()和replace()函數(shù)剔除多余的雜質(zhì),還日期一個(gè)“清白”。
5、關(guān)于文章主題標(biāo)簽的Xpath表達(dá)式,可以看到其在網(wǎng)頁結(jié)構(gòu)上處于日期的下方,如下圖所示。
因此可以通過更改一下發(fā)布日期的Xpath表達(dá)式,即可獲取到文章主題標(biāo)簽。
6、文章主題標(biāo)簽處于a標(biāo)簽下,如下圖所示。
獲取到整個(gè)列表之后,利用join函數(shù)將數(shù)組中的元素以逗號(hào)連接生成一個(gè)新的字符串叫tags,然后寫入Scrapy爬蟲文件中去。
7、對于點(diǎn)贊數(shù),其分析方法同之前一致,找到唯一的一個(gè)標(biāo)簽“vote-post-up”即可定位到數(shù)據(jù)。
8、細(xì)心的小伙伴可能會(huì)看到“vote-post-up”屬性并不是class標(biāo)簽中唯一一個(gè)屬性,所以一開始的Xpath表達(dá)式匹配的內(nèi)容為空。
這里給大家安利一個(gè)小技巧,如果標(biāo)簽中存在多個(gè)屬性,且屬性是唯一的時(shí)候,可以利用contains函數(shù)進(jìn)行助攻,其用法是'//span[contains(@class,"vote-post-up"),務(wù)必要多加練習(xí),否則容易忘記。根據(jù)網(wǎng)頁結(jié)構(gòu)寫出Xpath表達(dá)式,調(diào)試的過程如下圖所示。
取出的點(diǎn)贊數(shù)是個(gè)字符串,需要利用int()將其強(qiáng)制轉(zhuǎn)換為數(shù)字。
/小結(jié)/
本文基于Xpath理論基礎(chǔ),主要介紹了Scrapy爬蟲框架中利用Xpath選擇器提取某個(gè)網(wǎng)頁中目標(biāo)數(shù)據(jù)的方法,為后面抓取全網(wǎng)數(shù)據(jù)埋下伏筆,更精彩的操作在下篇文章奉上,希望對大家的學(xué)習(xí)有幫助。