【发布时间】:2017-11-05 11:30:41
【问题描述】:
我正在使用 Scrapy 从网站上提取一些关于音乐会的数据。我正在使用的至少一个网站使用(错误地,根据 W3C - Is it valid to have paragraph elements inside of a heading tag in HTML5 (P inside H1)?)在 h1 元素中使用 p 元素。尽管如此,我仍需要提取 p 元素中的文本,但不知道如何提取。
我已阅读文档并查看了示例用途,但对 Scrapy 来说相对较新。我了解该解决方案与将 Selector 类型设置为“xml”而不是“html”以识别任何 XML 树有关,但是对于我的一生,我无法弄清楚在这种情况下如何或在哪里执行此操作。
例如,一个网站具有以下 HTML:
<h1 class="performance-title">
<p>Bernard Haitink conducts Brahms and Dvořák featuring pianist Emanuel Ax
</p>
</h1>
我创建了一个名为 Concert() 的项目,其值名为“title”。在我的项目加载器中,我使用:
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()
这会在 item['title'] 中返回一个 unicode 列表,其中不包含 p 元素内的文本,例如:
['\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')
我在这里做错了什么,如何解析包含此问题的 HTML(h1 中的 p)?
我在Behavior of the scrapy xpath selector on h1-h6 tags 上引用了有关此特定问题的信息,但它没有提供可应用于蜘蛛的完整解决方案,只是会话中使用给定文本字符串的示例。
【问题讨论】:
-
试试这个 xpath: "//h1[@class="performance-title"]/text()" 除了在 chrome 开发工具中尝试(控制台)$x'='/ /h1[@class="performance-title"]/text()'
-
谢谢。我刚才试过了,仍然得到一组类似的空字符串。
-
把链接发给我!
-
bso.org/Performance/Detail/88671 感谢您的帮助。