Scrapy學(xué)習(xí)筆記02-選擇器

原文地址:LoveDev

Scrapy提取數(shù)據(jù)有自己的一套機(jī)制目胡。它們被稱作選擇器(seletors),他們通過(guò)特定的 XPath 或者 CSS 表達(dá)式來(lái)選擇HTML文件中的某個(gè)部分渤弛。

XPath

XPath 是一門(mén)在 XML 文檔中查找信息的語(yǔ)言,CSS 是一門(mén)將HTML文檔樣式化的語(yǔ)言葬项,本文主要介紹 XPath

以一個(gè)圖片為例子:

<?xml version="1.0" encoding="UTF-8"?>
<div class="item">
    <table class="pic">
        <a >
            ![1](https://img3.doubanio.com/view/movie_poster_cover/ipst/public/p480747492.webp)
            ![2](https://img3.doubanio.com/view/movie_poster_cover/ipst/public/p2233971046.jpg)
            <div>hello, world</div>
        </a>
    </table>
</div>

節(jié)點(diǎn)

在 XPath 中轻局,有七種類型的節(jié)點(diǎn):元素、屬性挡毅、文本蒜撮、命名空間、處理指令慷嗜、注釋以及根節(jié)點(diǎn)淀弹。XML 文檔是被作為節(jié)點(diǎn)樹(shù)來(lái)對(duì)待的。樹(shù)的根被稱為根節(jié)點(diǎn)庆械。

在上面例子中:

  • div:根節(jié)點(diǎn)
  • table:元素節(jié)點(diǎn)
  • href:屬性節(jié)點(diǎn)

選取節(jié)點(diǎn)

Expression Alias
nodename 選取當(dāng)前節(jié)點(diǎn)下所有子節(jié)點(diǎn)
/ 絕對(duì)路徑
// 文檔中所有該節(jié)點(diǎn)
. 當(dāng)前節(jié)點(diǎn)
.. 父節(jié)點(diǎn)
@ 選取屬性

是不是很眼熟呢薇溃?和命令行操作很類似

Expression Alias
div div下所有子節(jié)點(diǎn)
/div div根節(jié)點(diǎn)
div/table div子元素中所有table節(jié)點(diǎn)
//img 所有img節(jié)點(diǎn)
div//img div后代元素中所有table節(jié)點(diǎn)
//@src 名為src的所有屬性

謂語(yǔ)

謂語(yǔ)用來(lái)查找某個(gè)特定的節(jié)點(diǎn)或者包含某個(gè)指定的值的節(jié)點(diǎn)

Expression Alias
//img[@alt="1"] alt值為1的節(jié)點(diǎn)中src屬性的值
//a/img[1] a中子元素的第一個(gè)img元素
//a/img[last()] a中子元素的最后一個(gè)img元素

獲取值

Expression Alias
//img[@alt="1"]/@src alt值為1的節(jié)點(diǎn)中src屬性的值
/div/@class div根節(jié)點(diǎn)中class屬性的值
//a/div/text() div節(jié)點(diǎn)中的hello, world

捷徑

偉大的 chrome 已經(jīng)提供了直接復(fù)制 XPath 功能,在開(kāi)發(fā)者工具中右鍵節(jié)點(diǎn)選擇 Copy -> Copy XPath缭乘,就可以獲取到 XPath 的絕對(duì)路徑

選擇器

由于在response中使用XPath沐序、CSS查詢十分普遍,因此,Scrapy提供了兩個(gè)實(shí)用的快捷方式:response.xpath()response.css()

標(biāo)準(zhǔn)選擇器

# alt屬性值為1的img元素
response.xpath('//img[@alt="1"]')

xpath()css() 返回 SelectorList 類的實(shí)例策幼,這是一個(gè)新選擇器的列表邑时,SelectorList 類是內(nèi)建 list 類的子類,并提供一些額外的方法

Method Alias
xpath(query) 結(jié)果為一個(gè)單一化的 SelectorList
css(query) 結(jié)果為一個(gè)單一化的 SelectorList
extract() 提取真實(shí)的原文數(shù)據(jù)特姐,結(jié)果為單一化的unicode字符串列表
re() 通過(guò)正則表達(dá)式來(lái)提取數(shù)據(jù)晶丘,結(jié)果為單一化的unicode字符串列表
nonzero() 列表非空返回True,否則返回False

嵌套選擇器

# 包含src屬性唐含,并且src屬性值中包含doubanio字符串的img元素
response.xpath('//img[contains(@src, "doubanio")]')

帶有正則的選擇器

Selector 有一個(gè) .re() 方法浅浮,可以用來(lái)通過(guò)正則表達(dá)式來(lái)提取數(shù)據(jù),例如在 Scrapy學(xué)習(xí)筆記01-初窺 中:

# 獲取 “12345評(píng)論” 中的12345
item['commentsNum'] = sel.xpath('div[2]/div[2]/div/span[4]/text()').re(r'[\d]+')[0]
  • 括號(hào)里面的第一個(gè) r 表示字符串為非轉(zhuǎn)義的原始字符串捷枯,強(qiáng)烈推薦不管有沒(méi)有轉(zhuǎn)義字符都加上
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末滚秩,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子淮捆,更是在濱河造成了極大的恐慌郁油,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件攀痊,死亡現(xiàn)場(chǎng)離奇詭異桐腌,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蚕苇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)哩掺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人涩笤,你說(shuō)我怎么就攤上這事嚼吞。” “怎么了蹬碧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵舱禽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我恩沽,道長(zhǎng)誊稚,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任罗心,我火速辦了婚禮里伯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘渤闷。我一直安慰自己疾瓮,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布飒箭。 她就那樣靜靜地躺著狼电,像睡著了一般蜒灰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肩碟,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天强窖,我揣著相機(jī)與錄音,去河邊找鬼削祈。 笑死翅溺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的岩瘦。 我是一名探鬼主播未巫,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼窿撬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼启昧!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起劈伴,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤密末,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后墩邀,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體薄坏,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡择浊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了刹碾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡座柱,死狀恐怖迷帜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情色洞,我是刑警寧澤戏锹,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站火诸,受9級(jí)特大地震影響锦针,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜置蜀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一奈搜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盯荤,春花似錦馋吗、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)京髓。三九已至,卻和暖如春商架,著一層夾襖步出監(jiān)牢的瞬間堰怨,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工蛇摸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留备图,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓赶袄,卻偏偏與公主長(zhǎng)得像揽涮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子饿肺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容