我懷疑你的樹是不是在圖片中的一個節目,假設樹是:
import scrapy
from scrapy.selector import Selector
from scrapy.http import HtmlResponse
tree = '<div id="tags-holder">\
<div class="tags-holder1">\
<div class="large-12 columns tag-bar concept"></div>\
<div class="large-12 columns rel-bar">test</div>\
<div class="large-12 columns percentage">100.00%</div>\
<div class="large-12 columns tag-bar tag-text">cat</div>\
</div>\
<div class="tags-holder2">\
<div class="large-12 columns tag-bar concept"></div>\
<div class="large-12 columns rel-bar">test</div>\
<div class="large-12 columns percentage">100.00%</div>\
<div class="large-12 columns tag-bar tag-text">dog</div>\
</div>\
<div class="tags-holder3">\
<div class="large-12 columns tag-bar concept"></div>\
<div class="large-12 columns rel-bar">test</div>\
<div class="large-12 columns percentage">100.00%</div>\
<div class="large-12 columns tag-bar tag-text">elphant</div>\
</div>\
</div>'
print Selector(text=tree).xpath('//*[@id="tags-holder"]')
print Selector(text=tree).xpath('//*[@id="tags-holder"]/div[1]')
print Selector(text=tree).xpath('//*[@id="tags-holder"]/div[1]/div[4]/text()').extract()
輸出將是:
[<Selector xpath='//*[@id="tags-holder"]' data=u'<div id="tags-holder"> <div class="ta'>]
[<Selector xpath='//*[@id="tags-holder"]/div[1]' data=u'<div class="tags-holder1"> <div c'>]
[u'cat']
你的邏輯是正確的這種情況下,就需要使用text()
和extract()
更新:
根據您所提供的網址,我發現<div id="tags-holder">
是由JavaScript生成的,但Scrapy下載運行您的回調之前整個響應,這意味着的JavaScript生成的內容將不會在響應中。如果您查看源代碼,tags-holder
是空的:
<h6 id="concepts">Concepts</h6>
<div id="tags-holder" class="holder" style="display: block;">
</div>
<div id="tags-holder-extra" class="holder">
</div>
這就是爲什麼你的第一個xpath
已經返回,但其他兩個返回空。
,如果你使用的瀏覽器開發者工具(火狐,谷歌Chrome或Safari),在Chrome中,你可以將它打開菜單 - >工具 - >開發工具,然後從這裏可以看到整個負載響應。
我想你最好用selenium
和splash
嘗試這種動態網站。
你可以分享你正在試圖scrapy哪個網址? –
https://imagga.com/auto-tagging-demo?url=https://static.pexels.com/photos/104827/cat-pet-animal-domestic-104827.jpeg – Meowcat
檢查我更新的答案。 –