Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用正则表达式从页面文本中提取数字_Regex_Python 2.7_Scrapy - Fatal编程技术网

Regex 用正则表达式从页面文本中提取数字

Regex 用正则表达式从页面文本中提取数字,regex,python-2.7,scrapy,Regex,Python 2.7,Scrapy,我已经花了几个小时研究如何搜索页面上的所有文本,如果它与正则表达式匹配,则将其解压缩。我的蜘蛛设置如下: def parse(self, response): title = response.xpath('//title/text()').extract() units = response.xpath('//body/text()').re(r"Units: (\d)") print title, units 我想把页面上“单位:”后面的数字

我已经花了几个小时研究如何搜索页面上的所有文本,如果它与正则表达式匹配,则将其解压缩。我的蜘蛛设置如下:

def parse(self, response):
        title = response.xpath('//title/text()').extract()
        units = response.xpath('//body/text()').re(r"Units: (\d)")
        print title, units
我想把页面上“单位:”后面的数字取出来。当我在一个有单位的页面上运行scrapy:351时,我只得到页面的标题,前后都有一些转义,而单位没有

我对scrapy是新手,有一点python经验。对于如何在单位后提取整数:并从标题中删除额外转义字符“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>
尝试:


您能否在页面上显示
单元的示例位置…
文本?HTML代码会很好。我很确定您不需要扫描所有元素。@alecxe单元可以在页面上的任何位置,不一定在同一位置或同一标记内。唯一不变的是文本“Units:”。我包括了一个示例页面,该页面当前仅返回标题,单位为空。谢谢,
strong
标记如何,
单位数:
始终在
strong
内?@alecxe不需要在其周围放置任何标记。只要有单位:。这就是为什么我试图搜索body标签并在正则表达式上匹配。我知道没有标签是不理想的,但这就是我剩下的。明白了。你能提供几个其他案例的例子吗?会有很大帮助的。谢谢。这确实得到了上面例子中的单位:8,所以这更接近。我以为\d会把整个数字取出来。我会进一步研究,一定是我的正则表达式。谢谢。@Xaxum使用
\d+
而不是
\d
。谢谢。您知道如何摆脱所有这些\r\t。。一些文本中遇到的字符?@Xaxum尝试在XPath中使用
规范化空格(//body)
而不是
字符串(//body)
。@Xaxum顺便说一句,了解一些用于web抓取的XPath非常有帮助——您可能喜欢我不久前收集的XPath技巧列表:
units = response.xpath('string(//body)').re("(Units: [\d]+)")
response.xpath('string(//body)').re(r"Units: (\d)")