我想在html标签之间得到一些数字。我在html标签之间得到了所有东西,但我只需要数字。我想将它们存储为数据库中的整数。
示例HTML代码:
import itertools
import pandas as pd
import numpy as np
# get all of the xy pairs
xys = pd.DataFrame(list(itertools.product(range(size[0]), range(size[1]))))
# calculate distance
xys["distance"] = np.sqrt((xys[0] - center[0]) ** 2 + (xys[1] - center[1]) ** 2)
# transform to a 2d array
img = xys.set_index([0, 1])["distance"].unstack()
# if you want just the Numpy array, not a Pandas DataFrame
img.values
此模式为我提供了<div class="col-md-3 product-c"><span title="how many x product left"> 4 left</div>
$pattern = <div class="col-md-3 product-c"><span (?:.*?)>(.*?)</div>
,但我只想获取4 left
(或其他数字),因此我在下面的示例中尝试了此操作:
4
但是这次,它什么也不返回,只是一个空数组。
如何才能在这些标签之间仅获取数字?
答案 0 :(得分:2)
有两个问题:
这取决于您要指定的确切条件,但这将起作用:
<div class="col-md-3 product-c"><span (?:.*?)>(?:\s*)([0-9]+)(?:[^0-9]*)<\/div>
(?:.*?)
会忽略<span>
属性中可能包含的所有内容(?:\s*)
忽略数字前的空格([0-9]+)
将数字本身分组(?:[^0-9]*)
忽略数字后的任何内容这可以在 here 上看到。
话虽如此,您不妨考虑使用HTML解析器。
答案 1 :(得分:1)
我认为使用解析器将是最好的方法。一旦有了正确的值(通过解析为span
并检查title
),就可以将其强制转换为int,它将是所需的值。
$html = '<div class="col-md-3 product-c"><span title="how many x product left"> 4 left</div>';
$dom = new domdocument();
$dom->loadhtml($html);
$spans = $dom->getelementsbytagname('span');
foreach($spans as $span) {
if($span->getattribute('title') == 'how many x product left') {
echo (int)$span->nodeValue;
}
}