在Scrapy中如何利用CSS選擇器從網(wǎng)頁(yè)中采集目標(biāo)數(shù)據(jù)——詳細(xì)教程(上篇)
/前言/
今天小編給大家介紹Scrapy中另外一種選擇器,即大家經(jīng)常聽(tīng)說(shuō)的CSS選擇器。
/CSS基礎(chǔ)/
CSS選擇器和Xpath選擇器的功能是一致的,都是幫助我們?nèi)ザㄎ痪W(wǎng)頁(yè)結(jié)構(gòu)中的某一個(gè)具體的元素,但是在語(yǔ)法表達(dá)上有區(qū)別。Xpath選擇器明明已經(jīng)可以幫助我們提取信息了,為什么還要學(xué)習(xí)CSS選擇器呢?
蘿卜青菜各有所愛(ài),對(duì)于不同知識(shí)背景的小伙伴,都可以來(lái)提取網(wǎng)頁(yè)信息。只要是能抓到老鼠的貓,都是好貓,同樣的,只要能提取信息,不論是正則表達(dá)式、BeateafulSoup、Xpath選擇器亦或是CSS選擇器,都是好的選擇器,只不過(guò)在效率和難易程度上不一樣。此外,對(duì)應(yīng)前端的小伙伴來(lái)說(shuō),CSS選擇器對(duì)他們來(lái)說(shuō)就簡(jiǎn)單很多。
CSS選擇器功能強(qiáng)大,從實(shí)用性出發(fā),下面是部分比較常用的一些CSS選擇器語(yǔ)法,相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,但是也是非常實(shí)用的語(yǔ)法,希望大家都可以牢牢掌握,后期在提取網(wǎng)頁(yè)信息的時(shí)候?qū)?huì)事半功倍。
有了以上的CSS基礎(chǔ)之后,接下來(lái)我們進(jìn)行實(shí)際應(yīng)用。
/實(shí)際應(yīng)用/
仍然以之前的網(wǎng)站為例進(jìn)行說(shuō)明,我們的目標(biāo)數(shù)據(jù)是標(biāo)題、發(fā)布日期、主題、正文內(nèi)容、點(diǎn)贊數(shù)、收藏?cái)?shù)、評(píng)論數(shù)等。
1、關(guān)于標(biāo)題部分,之前我們利用Xpath的表達(dá)式的時(shí)候就分析過(guò),得到了唯一性的定位標(biāo)簽,在此不再贅述,如下圖所示。
2、仍然利用scrapyshell的調(diào)試模式進(jìn)行助攻,結(jié)合上邊的CSS基礎(chǔ)語(yǔ)法,標(biāo)題的具體CSS表達(dá)式如下圖所示。
需要注意的是在CSS中獲取標(biāo)簽文本內(nèi)容的方式是在CSS表達(dá)式后邊緊跟“::text”,記住是有兩個(gè)冒號(hào)噢,與Xpath表達(dá)式不一樣。這個(gè)表達(dá)式看上去比Xpath表達(dá)式要簡(jiǎn)潔一些,所以當(dāng)某些情況下,大家如果覺(jué)得CSS選擇器的表達(dá)式比Xpath表達(dá)式要簡(jiǎn)短或者理解起來(lái)相對(duì)容易的話,可以首選CSS選擇器,沒(méi)有具體的要求,大家根據(jù)自己的喜愛(ài)來(lái)進(jìn)行選擇即可,反之亦成立,當(dāng)然也可以同時(shí)在一個(gè)爬蟲(chóng)文件將兩個(gè)或者多個(gè)選擇器進(jìn)行交叉使用。
3、接下來(lái)是發(fā)布日期的提取,仍然是以交互式的方式實(shí)現(xiàn)網(wǎng)頁(yè)與源碼之間的交互,其中標(biāo)簽“entry-meta-hide-on-mobile”具有全局唯一性,可以很方便的定位到元素,如下圖所示。
4、根據(jù)網(wǎng)頁(yè)結(jié)構(gòu),我們可輕易的寫(xiě)出發(fā)布日期的CSS表達(dá)式,可以在scrapy shell中先進(jìn)行測(cè)試,再將選擇器表達(dá)式寫(xiě)入爬蟲(chóng)文件中,詳情如下圖所示。
5、關(guān)于文章主題標(biāo)簽的CSS表達(dá)式,可以看到其在網(wǎng)頁(yè)結(jié)構(gòu)上處于日期的下方,如下圖所示。
6、通過(guò)更改一下發(fā)布日期的CSS表達(dá)式,即可獲取到文章主題標(biāo)簽。文章主題標(biāo)簽處于a標(biāo)簽下,如下圖所示。
獲取到整個(gè)列表之后,利用join函數(shù)將數(shù)組中的元素以逗號(hào)連接生成一個(gè)新的字符串叫tags,然后寫(xiě)入Scrapy爬蟲(chóng)文件中去。
7、對(duì)于點(diǎn)贊數(shù),其分析方法同之前一致,找到唯一的一個(gè)標(biāo)簽“vote-post-up”即可定位到數(shù)據(jù)。
8、點(diǎn)贊數(shù)在h10標(biāo)簽下,根據(jù)網(wǎng)頁(yè)結(jié)構(gòu)寫(xiě)出CSS表達(dá)式,調(diào)試的過(guò)程如下圖所示。
取出的點(diǎn)贊數(shù)是個(gè)字符串,需要利用int()將其強(qiáng)制轉(zhuǎn)換為數(shù)字。
/小結(jié)/
本文基于CSS理論基礎(chǔ),主要介紹了CSS選擇器的簡(jiǎn)單語(yǔ)法和利用CSS選擇器做相關(guān)數(shù)據(jù)采集,下一篇文章將繼續(xù)分享CSS表達(dá)式數(shù)據(jù)采集方法,敬請(qǐng)期待,希望對(duì)大家的學(xué)習(xí)有幫助。
想學(xué)習(xí)更多關(guān)于Python的知識(shí),可以參考學(xué)習(xí)網(wǎng)址:http://pdcfighting.com/,點(diǎn)擊閱讀原文,可以直達(dá)噢~