【发布时间】:2014-12-30 15:33:56
【问题描述】:
我一直在寻找几个小时来了解如何搜索页面上的所有文本,如果它与正则表达式匹配,然后提取它。我的蜘蛛设置如下:
def parse(self, response):
title = response.xpath('//title/text()').extract()
units = response.xpath('//body/text()').re(r"Units: (\d)")
print title, units
我想提取页面上“单位:”后面的数字。当我在正文中包含 Units: 351 的页面上运行 scrapy 时,我只得到页面的标题,前后有一堆转义符,而没有任何单位。
我是scrapy的新手,有一点python经验。任何有关如何在 Units: 之后提取整数并从标题中删除额外转义字符“u'\r\n\t...”的帮助将不胜感激。
编辑: 根据评论,这里是示例页面的部分 html 提取。请注意,这可能在本例中除 p 之外的不同标签内:
<body>
<div> Some content and multiple Divs here <div>
<h1>This is the count for Dala</h1>
<p><strong>Number of Units:</strong> 801</p>
<p>We will have other content here and more divs beyond</p>
</body>
根据下面的答案,这就是其中的大部分内容。仍在努力删除 Units: 和额外的转义字符。
units = response.xpath('string(//body)').re("(Units: [\d]+)")
【问题讨论】:
-
您能否在页面上显示
Units ...文本的示例位置? HTML代码会很好。我很确定您不需要扫描所有元素。 -
@alecxe 单位可以在页面上的任何位置,不一定在同一位置或同一标签内。唯一不变的是文本“Units:”。我包含了一个示例页面,该页面当前只返回一个标题并且对于单位是空的。
-
谢谢,
strong标签呢,Number of Units:总是在strong里面吗? -
@alecxe 不,他们不需要在其周围放置任何标签。只要有单位:。这就是为什么我试图搜索正文标签并匹配正则表达式的原因。我知道没有标签可去是不理想的,但这就是我剩下的。
-
明白了。您能否提供几个涵盖其他案例的示例?会有很大帮助。谢谢。
标签: regex python-2.7 scrapy