我正在使用Python和Xpath来刮掉Reddit。目前我在头版工作。我试图从其首页提取链接并在shell中显示它们的标题。
为此,我使用的是Scrapy框架。我正在Scrapy shell中测试它。
我的问题是:如何从<a> ABC </a>
属性中提取文本。我想要字符串“ABC”。我找不到它了。我尝试了以下表达式,但它似乎不起作用。
response.xpath('//p[descendant::a[contains(@class,"title")]]/@value')
response.xpath('//p[descendant::a[contains(@class,"title")]]/@data')
response.xpath('//p[descendant::a[contains(@class,"title")]]').extract()
response.xpath('//p[descendant::a[contains(@class,"title")]]/text()')
它们似乎都不起作用。当我使用extract()
时,它会给我整个属性本身。例如,它不会给我ABC
,而是会给我<a>ABC</a>
。
如何提取文本字符串?
答案 0 :(得分:1)
仅使用在线XPath评估程序对其进行测试,但在将其调整为
时应该可以使用它response.xpath('//p/descendant::a[contains(@class,"title")]/text()')
如果您正在评估//p[descendant::a[contains(@class,"title")]]/text()
,则<p>
(带有后代<a>
)是当前元素,而不是<a>
。
答案 1 :(得分:1)
如果<p>
和<a>
处于这种情况:
<p>
<something>
<a class="title">ABC</a>
</something>
</p>
这会给你“ABC”:
>>print response.xpath('//p//a[@class="title"]/text()').extract()[0]
ABC
//
等于使用descendants
。 p[descendant::a]
不会给您结果,因为您没有将<a>
视为<p>
的后代