1. 程式人生 > >第六篇 xpath的用法

第六篇 xpath的用法

com F12 信息 -1 時間 每次 pos project ole

技術分享

技術分享

技術分享

技術分享

使用pycharm debug調試效率會比較慢,因為每次調試都需要向url發送請求,等返回信息,scrapy提供一種方便調試的功能,如下:

>>>(third_project) [email protected]:pachong$ scrapy shell http://blog.jobbole.com/112239/
>>> title = response.xpath(//*[@id="post-112239"]/div[1]/h1)
>>> title
[<Selector xpath=//*[@id="post-112239"]/div[1]/h1
data=<h1>谷歌用兩年時間研究了 180 個團隊,發現高效團隊有這五個特征</h1>>] >>> title.extract() [<h1>谷歌用兩年時間研究了 180 個團隊,發現高效團隊有這五個特征</h1>] >>> title = response.xpath(//*[@id="post-112239"]/div[1]/h1/text()) >>> title [<Selector xpath=//*[@id="post-112239"]/div[1]/h1/text() data=
谷歌用兩年時間研究了 180 個團隊,發現高效團隊有這五個特征>]

extract()方法可以取到select list裏的date,text()方法可以取到內容。

In [37]: title2 = response.xpath("//*[@id=‘post-112239‘]/div[1]/h1").extract()

In [38]: title2
Out[38]: [<h1>谷歌用兩年時間研究了 180 個團隊,發現高效團隊有這五個特征</h1>]

In [39]: title2 = response.xpath("//*[@id=‘post-112239‘]/div[1]/h1
") In [40]: title2 Out[40]: [<Selector xpath="//*[@id=‘post-112239‘]/div[1]/h1" data=<h1>谷歌用兩年時間研究了 180 個團隊,發現高效團隊有這五個特征</h1>>] In [41]: title2 = response.xpath("//*[@id=‘post-112239‘]/div[1]/h1/text()").extr ...: act() In [42]: title2 Out[42]: [谷歌用兩年時間研究了 180 個團隊,發現高效團隊有這五個特征] In [43]:

PS:在chrome裏,按F12看到的代碼是加載完所有插件後的,比如JS,如果通過通過根路徑來定位要找的內容是容易出錯的,因為xpath搜索的不會把js等生成的元素計算在內,這個可以通過鼠標右鍵查看源碼來判斷哪些是js生成的,然後過濾掉。

對於屬性裏有多個值的情況,比如class 裏有多個值:

技術分享

可以使用scrapy內置的contains方法:

In [44]: ret = response.xpath("//div[contains(@class,‘post-112239‘)]")

In [45]: ret
Out[45]: [<Selector xpath="//div[contains(@class,‘post-112239‘)]" data=<div class="post-112239 post type-post s>]

第六篇 xpath的用法