2017-05-06 31 views
1

我已經被刮取的頁面,這個網站的內容:Scrapy得到一個href的值的值,如果條件爲真

<div class="td-ss-main-content"> 
 
    <div class="td-page-header">...</div> 
 
    <div class="td_module_16 td_module_wrap td-animation-stack">...</div> 
 
    <div class="td_module_16 td_module_wrap td-animation-stack td_module_no_thumb">...</div> 
 
    <div class="page-nav td-pb-padding-side"> 
 
    <span class="current">1</span> 
 
    <a href="http://www.arunachaltimes.in/2017/05/06/page/2/" class="page" title="2">2</a> 
 
    <a href="http://www.arunachaltimes.in/2017/05/06/page/3/" class="page" title="3">3</a> 
 
    <a href="http://www.arunachaltimes.in/2017/05/06/page/2/"><i class="td-icon-menu-right"></i></a> 
 
    <span class="pages">Page 1 of 3</span> 
 
    </div> 
 
</div>

現在我想獲得,如果下一個頁面鏈接其存在於.page-nav > a的href值中,其具有i tag

我可以這樣做:

response.css("div.page-nav > a")[2].css("::attr(href)").extract_first() 

但如果我是第2頁。所以,這是更好地得到a tag價值,如果它有一個i tag的子元素,這將無法正常工作。我怎樣才能做到這一點?

更新(第2頁)

<div class="page-nav td-pb-padding-side"> 
    <a href="http://www.arunachaltimes.in/2017/05/06/"><i class="td-icon-menu-left"></i></a> 
    <a href="http://www.arunachaltimes.in/2017/05/06/" class="page" title="1">1</a> 
    <span class="current">2</span> 
    <a href="http://www.arunachaltimes.in/2017/05/06/page/3/" class="page" title="3">3</a> 
    <a href="http://www.arunachaltimes.in/2017/05/06/page/3/"><i class="td-icon-menu-right"></i></a> 
    <span class="pages">Page 2 of 3</span> 
</div> 

更新(第3頁最後一頁)

<div class="page-nav td-pb-padding-side"> 
    <a href="http://www.arunachaltimes.in/2017/05/06/page/2/"><i class="td-icon-menu-left"></i></a> 
    <a href="http://www.arunachaltimes.in/2017/05/06/" class="page" title="1">1</a> 
    <a href="http://www.arunachaltimes.in/2017/05/06/page/2/" class="page" title="2">2</a> 
    <span class="current">3</span> 
    <span class="pages">Page 3 of 3</span> 
</div> 

回答

2

您可以使用XPath表達式實現它:

//div[contains(concat(' ', @class, ' '), ' page-nav ')]/a[contains(concat(' ', i/@class, ' '), ' td-icon-menu-right ')]/@href 

請注意,以避免fal我們正在使用concat for the class attribute check

演示:

$ scrapy shell file:////$PWD/index.html 
In [1]: response.xpath("//div[contains(concat(' ', @class, ' '), ' page-nav ')]/a[contains(concat(' ', i/@class, ' '), ' td-icon-menu-right ')]/@href").extract_first() 
Out[1]: u'http://www.arunachaltimes.in/2017/05/06/page/2/' 
+0

我很抱歉,但XPath表達式是行不通的。如果我在第二頁上,它顯示第一頁。如果我在第3頁(最後一頁),則顯示第2頁。 – Robin

+0

@Robin可能是因爲你在'a'裏面有'i'元素的要求是無效的嗎?我只是按照說明。你可以發佈如何看HTML,如果你在第二頁上? – alecxe

+0

即使是css版本也不行。如果我在第二頁上,它會得到正確的網址。但是如果我在第三頁(最後一頁),它會回到第二頁。 – Robin

相關問題