Python 匹配多个<;p>;刮痕标签
我有如下类似的Python 匹配多个<;p>;刮痕标签,python,xpath,scrapy,Python,Xpath,Scrapy,我有如下类似的html: <div class="articleBody"> <p> <strong>Text</strong> lorem ipsum... <strong>lorem ipsum...</strong> </p> <p>lorem ipsum <strong> lorem ipsum lorem ipsum</strong&
html
:
<div class="articleBody">
<p>
<strong>Text</strong> lorem ipsum...
<strong>lorem ipsum...</strong>
</p>
<p>lorem ipsum
<strong> lorem ipsum lorem ipsum</strong>
lorem ipsum...lorem ipsum...lorem ipsum...lorem ipsum...
</p>
</div>
但这只返回第一个
任何帮助都将不胜感激。试一试:
for node in response.xpath('//div[@class="articleBody"]//p'):
print node.xpath('string()').extract()
…然后您可以连接字符串或将它们添加到列表或其他任何内容,而不是像我那样打印它们
xpath 2.0还有string-join()函数,但看起来scrapy支持xpath 1.0
更多关于字符串连接的信息,请点击此处:尝试一下:
for node in response.xpath('//div[@class="articleBody"]//p'):
print node.xpath('string()').extract()
…然后您可以连接字符串或将它们添加到列表或其他任何内容,而不是像我那样打印它们
xpath 2.0还有string-join()函数,但看起来scrapy支持xpath 1.0
关于字符串连接的更多信息,请参见此处:我不知道scrapy,但您应该能够使用
//div[@class=“articleBody”]/p/text()
p.s来获取所有文本。如果您不关心p标记是否是div的直接子标记,我可能误解了“减去标记”的含义。Luciddream是正确的,或者//p而不是/p[@class=“articleBody”]。可以将所有内容转储到一个字符串中,如:'.join(response.xpath('//div[@class=“articleBody”]/p//text()).extract())我不知道scrapy,但您应该能够使用//div[@class=“articleBody”]/p/text()
p减去标记意味着.Luciddream是正确的,或者如果您不关心p标记是否是div[@class=“articleBody”]的直接子级,则使用//p而不是/p。可以将所有内容转储到一个字符串中,如:“”.join(response.xpath('//div[@class=“articleBody”]/p//text()).extract())