我试图从我写的另一个beautifulsoup脚本收集的数据中剖析出一个整数。 我得到的数据总是以下三个中的一个:
<div id="counts"> 500 hits </div>
<div id="counts">3 hits </div>
<div id="counts"> hits </div>
点击次数各不相同,有时会附加到“&gt;”有时候不是。其他时候整数不存在。所以我写了这个脚本只返回数据中的数字(或告诉我没有数字)。它似乎笨拙而缓慢,我觉得应该有更快的方法来做到这一点? (在这个代码示例中,我将'搜索'作为bs scrape的3种可能结果之一)
keywords = ['hits']
results = []
search = '<div id="hits"> 3 hits </div>'
num_check = False
store_next = False
words = search.split()
def is_number(results, num_check):
while num_check <= 0:
try:
float(results[0])
num_check = True
except ValueError:
results[0] = ''.join(filter(lambda x: x.isdigit(), results[0]))
if results[0] == '':
num_check = 2
if num_check <= 1:
print(results[0])
for word in reversed(words):
if store_next:
results.append(word)
store_next = False
elif word in keywords:
store_next = True
is_number(results, num_check)
编辑:有时(很少)<div></div>
包含更多信息,例如ping速度(0.22 seconds)
,这就是我无法在整个子句中搜索整数的原因。
答案 0 :(得分:2)
search = '<div id="hits"> 3 hits </div>'
re.findall("\d+",search)
或浮动
re.findall("\d+\.?\d*",search)
如果你知道你一次不会超过一个
re.search("(\d+)",search).group(0)
这是一些时间信息
>>> timeit.timeit("re.search(\"(\d+)\",'<div id=\"hits\"> 3 hits </div>').group( 0)","import re",number = 1000)
0.0031895773144583472
>>> timeit.timeit("filter(str.isdigit, '<div id=\"hits\"> 3 hits </div>')",numbe r=1000)
0.0049939576031476918
>>>