三、用Css來提取網(wǎng)頁

scrapy提供了兩種提取方法,Xpath和Css。

Xpath用起來覺得好麻煩,有點(diǎn)笨,我還是比較喜歡Css的提取方式。因?yàn)镃SS定位語法比Xpath簡潔,定位方式更靈活多樣,可以使用#id來根據(jù)ID獲取元素,以及使用.class來根據(jù)class獲取元素.用XPath實(shí)現(xiàn)的話都不會那么簡潔,反過來呢,XPath可以使用,來返回到DOM樹的上層節(jié)點(diǎn)中。anyway先操練起來!

http://blog.jobbole.com/102337/


F12來打開網(wǎng)頁源代碼,也可以點(diǎn)擊firefox旁邊那個(gè)小蜜蜂??

我現(xiàn)在想提取“我想對所有新手程序員說些肺腑之言”

關(guān)鍵詞:entry-header;? ? h1

我們現(xiàn)在用mac終端來測試一下提取結(jié)果,進(jìn)入虛擬環(huán)境

輸入:

scrapy shellhttp://blog.jobbole.com/102337/

1.提取title

>>> response.css(".entry-header h1::text").extract()[0]

'我想對所有新手程序員說些肺腑之言'

解釋一下:

這個(gè)點(diǎn).? 表示 選擇所有class包含container的節(jié)點(diǎn)

extract()提取出他的值

[0]

::text偽類選擇器

這里要用py3,編碼才是Unicode中文字,不然py2的話,還是utf8字符串的顯示模式。

2.提取日期

>>> response.css("p.entry-meta-hide-on-mobile::text").extract()[0].strip()

'2017/05/27 ·'

3、提取點(diǎn)贊數(shù)

>>> response.css(".vote-post-up? h10::text").extract()[0]

'3'

4、提取收藏?cái)?shù)

>>> response.css(".bookmark-btn::text").extract()[0]

' 7 收藏'

用正則表達(dá)式把7提取出來

進(jìn)入python環(huán)境,測試一下正則表達(dá)式

是騾子是馬拉出來溜溜,不行慢慢調(diào)試

importre

match_re=re.match(".*?(\d+).*"," 7 收藏")

ifmatch_re:

print(match_re.group(1))

yeah!7出來了

5、提取評論數(shù)

我用了比較笨的方法提取的:

>>> response.css(".btn-bluet-bigger::text").extract()

[' ', ' 贊', ' 7 收藏', ' 3 評論']

>>> response.css(".btn-bluet-bigger::text").extract()[3]

' 3 評論'

>>> response.css(".btn-bluet-bigger::text").extract()[3].strip()

'3 評論'

Bobby老師是這么做的,

response.css("a[href='#article-comment'] span::text").extract()[0]

走神中:

自己做個(gè)小練習(xí):


把博士帽那個(gè)240聲望值提取一下。

>>> response.css("#author-bio .author-bio-info-block a::text").extract()[2].strip()

'240'

哎,還是我的笨方法好用,先這樣吧,以后慢慢優(yōu)化吧

6.提取內(nèi)容

>>> response.css ( ".entry" ).extract()[0]或者

>>> response.css ( "div.entry" ).extract()[0]

都可以

7、提取tag標(biāo)簽

>>> response.css(".entry-meta-hide-on-mobile a::text").extract()

['開發(fā)', ' 3 評論 ', '程序員']

如何把3評論給扔掉呢?

用數(shù)組的方式在python里面簡單寫段代碼來驗(yàn)證一下

tag_list= ['開發(fā)',' 3 評論 ','程序員']

tag_list= [elementforelementintag_listif notelement.strip ().endswith ("評論")]

tags =",".join (tag_list)

print(tag_list)



Xpath基本語法

舉例元素標(biāo)簽為artical標(biāo)簽

一:

artical 選取所有artical元素的子節(jié)點(diǎn)

/artical 選取根元素artical

artical/a 選取所有屬于artical的子元素a元素

//div??? 選取所有div 子元素,無論div在任何地方

artical//div? 選取所有屬于artical的div 元素,無論div元素在artical的任何位置

//@class 選取所有名為class 的屬性的

二:謂語

/artical/div[1]?? 選取所有屬于artical 子元素的第一個(gè)div元素

/artical/div[last()]? 選取所有屬于artical子元素的最后一個(gè)元素

/artical/div[last()-1] 選取所有屬于artical子元素的倒數(shù)低2個(gè)元素

//div[@lang]?? 選取所有擁有屬性為lang的元素

//div[@lang="eng"] 選取所有div下lang屬性為eng的元素

三:

/div/* 選取所有屬于div元素的所有子節(jié)點(diǎn)

//*??? 選取所有元素

//div[@*]?? 選取所有帶屬性的title元素

//div/a|//div/p?? 選取所有div元素的a和p 元素

//span | //ul?? 選取文檔中所有span和ul 的元素

artical/div/pl|//span? 選取所有div下的pl和文檔中所有span

注意事項(xiàng):

1) 按照審查元素的寫法不一定正確,要按照網(wǎng)頁源碼的才行

因?yàn)椴灰粯?,網(wǎng)頁源碼才是你看到的

2) 瀏覽器有自帶的復(fù)制xpath功能,firefox下載firebug插件

3) xpath有c的速度,所以按照[@class=""]準(zhǔn)確性較高

CCS選擇器語法

* ??? ??? ??? ??? ?選擇所有節(jié)點(diǎn)

#container ?? ??? ?選擇id為container的節(jié)點(diǎn)

.container????? 選擇所有class包含container的節(jié)點(diǎn)

li a??????????? 選取所有l(wèi)i 下所有a節(jié)點(diǎn)

ul + p????????? 選取ul后面的第一個(gè)p元素

div#container > ul 選取id為container的div的第一個(gè)ul子元素

ul ~p ?? ??? ??? ?選取與ul相鄰的所有p元素

a[title]??????? 選取所有有title屬性的a元素

a[]? 選取所有href屬性為http://jobbole.com的a元素

a[href*="jobbole"]???? 選取所有href屬性值中包含jobbole的a元素

a[href^="http"]??? 選取所有href屬性值中以http開頭的a元素

a[href$=".jpg"]??? 選取所有href屬性值中以.jpg結(jié)尾的a元素

input[type=radio]:checked?? 選擇選中的radio的元素

div:not(#container)? 選取所有id為非container 的div屬性

li:nth-child(3)????? 選取第三個(gè)li元素

li:nth-child(2n)????? 選取第偶數(shù)個(gè)li元素

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 20170531 這幾天重新拾起了爬蟲,算起來有將近5個(gè)月不碰python爬蟲了。 對照著網(wǎng)上的程序和自己以前寫的...
    八神蒼月閱讀 14,378評論 3 44
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,131評論 1 92
  • scrapy學(xué)習(xí)筆記(有示例版) 我的博客 scrapy學(xué)習(xí)筆記1.使用scrapy1.1創(chuàng)建工程1.2創(chuàng)建爬蟲模...
    陳思煜閱讀 13,076評論 4 46
  • 那片葉子落在你的腳邊, 你會去拾起來嗎? 那座白雪封頂山峰坐落在你眼前, 你會起身去攀登嗎? 那個(gè)你日思夜想女孩兒...
    LovLe閱讀 186評論 0 1
  • 剛剛過去的2016年,在寫作上顆粒無收,年底填表的時(shí)候,心里難過極了。年底大家紛紛回顧自己這一年的時(shí)候,我只能...
    粗腰小胖腿閱讀 175評論 0 1

友情鏈接更多精彩內(nèi)容