用Python/Scrapy在h1中提取p
我正在使用Scrapy从网站上提取一些关于音乐会的数据。根据W3C的说法,至少有一个我正在使用的网站使用不正确——h1元素中的p元素。然而,我需要提取p元素中的文本,并且无法理解如何提取 我已经阅读了文档并查看了示例用法,但对Scrapy来说还是比较新的。我知道解决方案与将选择器类型设置为xml而不是html有关,以便识别任何xml树,但就我个人而言,我不知道在这个实例中如何或在何处这样做 例如,网站具有以下HTML:用Python/Scrapy在h1中提取p,python,html,scrapy,lxml,Python,Html,Scrapy,Lxml,我正在使用Scrapy从网站上提取一些关于音乐会的数据。根据W3C的说法,至少有一个我正在使用的网站使用不正确——h1元素中的p元素。然而,我需要提取p元素中的文本,并且无法理解如何提取 我已经阅读了文档并查看了示例用法,但对Scrapy来说还是比较新的。我知道解决方案与将选择器类型设置为xml而不是html有关,以便识别任何xml树,但就我个人而言,我不知道在这个实例中如何或在何处这样做 例如,网站具有以下HTML: <h1 class="performance-title"> &
<h1 class="performance-title">
<p>Bernard Haitink conducts Brahms and Dvořák featuring pianist Emanuel Ax
</p>
</h1>
这将在项目['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')
我在这里做错了什么,如何解析h1中包含问题p的HTML
我在上引用了有关此特定问题的信息,但它没有提供可应用于spider的完整解决方案,仅提供了使用给定文本字符串的会话中的一个示例 这真让人费解。坦率地说,我仍然不明白为什么会发生这种情况。发现应该包含在标记中的标记不是这样。站点的Curl显示为,而从站点获得的响应显示为:
//*[@id="content"]/section/article/section[2]/h1/p/text()
这是通过使用作为地标并找到它的同级标记来实现的除了在chrome开发工具控制台$x'='//h1[@class=performance title]/text中尝试之外,还可以尝试使用xpath://h1[@class=performance title]/text'谢谢。我刚才试过了,但仍然得到了一组类似的空字符串。请将链接发送给我!谢谢你的帮助。你能告诉我你是在什么情况下让这个工作的吗?当放入上面我的剪贴代码时,它根本不会返回任何项目['title']。我引用了:并修改了问题以包含这些链接。当然,很高兴能提供帮助。
//*[@id="content"]/section/article/section[2]/h1/p/text()
<h1 class="performance-title">\n</h1>
<p>Bernard Haitink conducts Brahms and\xa0Dvo\u0159\xe1k featuring\npianist Emanuel Ax
</p>
response.xpath('//h1[@class="performance-title"]/following-sibling::p/text()').extract()