2017-03-03 54 views
0

我想寫一個使用scrapy和xpath的web刮板,但我遇到了令人沮喪的問題。xpath和scrapy沒有讓文本變成具有多個屬性的段落

我需要擁有HTML

<p class="list-details__item__date" id="match-date">04.03.2017 - 15:00</p> 

我可能是錯的段落中的文本,但由於P有一個id屬性,它應該是可借鑑簡單地使用

response.xpath('//p[@id="match-date"]/text()').extract() 

反正這將無法工作。

我知道一些xpath,我可以在過去寫刮刀,但是這個給了我麻煩。我嘗試了許多解決方案,但似乎沒有人上班

response.xpath('//p[contains(@class, "list-details__item__date") and contains(@id,"match-date")]/text()').extract() 

    response.xpath('//p[@class="list-details__item__date" and @id="match-date"]/text()').extract() 

我使用也嘗試過「載」在許多答案說明,但它並沒有正常工作。這可能是我正在做的一個愚蠢的錯誤......如果有人能夠幫助我,那將會很棒!

謝謝你這麼多

+0

你的榜樣輸入顯示' 「比賽日」'用破折號,你的XPath使用'_'('「match_date」')。請嘗試'response.path('// p [@ id =「match-date」]/text()')。extract()' –

+0

謝謝,這是由於複製/粘貼混亂造成的錯字...我修復了它現在 – peppuce

+0

順便說一句我能夠從頁面中提取其他元素...這似乎給問題,因爲多個屬性 – peppuce

回答

0

也許match-date通過AJAX/JS加載中...請在您的瀏覽器禁用Javascript和再看看match-date是有或沒有。

此外,爲了便於使用,請使用CSS選擇器而不是xPath。

response.css('#match-date::text').extract() 

編輯:

要獲得data-dt屬性的值,這樣做

response.css('#match-date::attr(data-dt)').extract() 

或XPath

response.xpath('//p[@id="match-date"]/@data-dt').extract() 
+0

嗨@Umair並感謝您的答案...你是對的,我禁用JavaScript和代碼改變... id仍然存在,但是現在段落中沒有文字,但它有一個屬性'data-dt =「4,3,2017,15,00」'...我會嘗試訪問它從我的代碼中,並讓你知道 – peppuce

+0

非常感謝@umair,我將我的xpath修復爲'response.xpath('// p [@ id =「match-date」]/@ data-dt')。extract()'它正在工作(現在已經太晚了,無法瞭解css選擇器:))...再次感謝!!! – peppuce

+0

只是想知道是否有任何其他方式讓scrapy閱讀相同的代碼,因爲我使用javascript啓用了...這將容易得多 – peppuce