2017-06-04 34 views
0

我正在使用Scrapy從網站中提取有關音樂會的一些數據。至少有一個我正在使用的網站(錯誤地根據W3C - Is it valid to have paragraph elements inside of a heading tag in HTML5 (P inside H1)?)使用h1元素中的p元素。我需要提取p元素中的文本,但無法弄清楚。用Python/Scrapy在h1內提取p-1

我已閱讀文檔並查看了示例用途,但是對於Scrapy來說,這是相對較新的。我知道解決方案與將Selector類型設置爲「xml」而不是「html」以便識別任何XML樹有關,但對於我的生活,我無法弄清楚在這種情況下如何或在哪裏做。

例如,一個網站具有以下HTML:

<h1 class="performance-title"> 
<p>Bernard Haitink conducts Brahms and&nbsp;Dvořák featuring pianist  Emanuel Ax 
</p> 
</h1> 

我做了一個項目叫做演唱會(),有一個名爲「標題」值。在我的項目裝載機,我使用:

def parse_item(self, response):  
    thisconcert = ItemLoader(item=Concert(), response=response) 
    thisconcert.add_xpath('title','//h1[@class="performance-title"]/p/text()') 

    return thisconcert.load_item() 

這將返回,項[「標題」],不包括p元素中的文本unicode的列表,如:

['\n     ', '\n     ', '\n    '] 

我明白爲什麼,但我不知道如何解決這個問題。我也嘗試了諸如:

from scrapy import Selector 

def parse_item(self, response): 

    s = Selector(text=' '.join(response.xpath('.//section[@id="performers"]/text()').extract()), type='xml') 

我在做什麼錯在這裏,我怎麼可以解析包含此問題(H1內P)HTML?

我已經提到了關於這個具體問題上的信息,在Behavior of the scrapy xpath selector on h1-h6 tags,但它並沒有提供一個會話中使用給定文本字符串,可以應用到蜘蛛的完整解決方案,只是一個例子。

+0

給它這個XPath一試:「除了在chrome開發工具(控制檯)中嘗試使用h1 [@ class =「performance-title」]/text()$ x'='// h1 [@ class =「performance-title」]/text()' – mtt2p

+0

謝謝。我剛剛嘗試過,仍然得到一組類似的空字符串。 – NFB

+0

給我鏈接! – mtt2p

回答

1

這很令人費解。坦率地說,我仍然不明白爲什麼會發生這種情況。發現應該包含在<h1>標籤中的<p>標籤不是這樣。捲曲的網站顯示形式<h1><p> </p></h1>的,而從網站獲得的響應其顯示爲:

<h1 class="performance-title">\n</h1> 
<p>Bernard Haitink conducts Brahms and\xa0Dvo\u0159\xe1k featuring\npianist Emanuel Ax 
</p> 

正如我所說,我有我的懷疑,但沒有混凝土。不管怎麼說,在的XPath用於獲取內部<p>標籤的文本,因此是:

response.xpath('//h1[@class="performance-title"]/following-sibling::p/text()').extract() 

這是通過使用<h1 class="performance-title">作爲一個里程碑,找到它的兄弟<p>標籤

+0

這個作品 - 謝謝!已標記回答。 – NFB

+0

當然,很高興提供幫助。 –

0
//*[@id="content"]/section/article/section[2]/h1/p/text() 
+1

你能告訴我在什麼情況下你得到這個工作?當放到我上面的scrapy代碼中時,它根本不會返回任何項['title']。我已經引用:https://stackoverflow.com/questions/19779519/is-it-valid-to-have-paragraph-elements-inside-of-a-heading-tag-in-html5-p-insid和http: // techqa。info/programming/question/41063971/scrapy-xpath-selector-on-h1-h6-tags的行爲 – NFB

+0

修改了包含這些鏈接的問題。 – NFB