我正在使用line.rfind()来查找html页面中的某一行,然后我将该行拆分为拉出单个数字。例如:
position1 = line.rfind('Wed')
这找到了这行特殊的html代码:
<strong class="temp">79<span>°</span></strong><span class="low"><span>Lo</span> 56<span>°</span></span>
首先,我要提取'79',这是通过以下代码完成的:
if position1 > 0 :
self.high0 = lines[line_number + 4].split('<span>')[0].split('">')[-1]
这完美无缺。我遇到的问题是试图从那行html代码中提取'56'。我不能把它分开'&lt;跨度&GT;”和'&lt; /跨度&GT;自从第一个'&lt;跨度&GT;”它发现在'79'之后。有没有办法告诉脚本寻找第二次出现的'&lt;跨度&GT;'
感谢您的帮助!
答案 0 :(得分:2)
Concerns about parsing HTML with regex aside,我发现正则表达式对于从有限的机器生成的HTML中获取信息非常有用。
你可以用这样的正则表达式取出两个值:
import re
matches = re.findall(r'<strong class="temp">(\d+).*?<span>Lo</span> (\d+)', lines[line_number+4])
if matches:
high, low = matches[0]
考虑一下这种快速和肮脏:如果你依赖它来完成一项工作,你可能想要使用像BeautifulSoup这样的真正的解析器。
答案 1 :(得分:1)
import re
html = """
<strong class="temp">79<span>°</span></strong><span class="low"><span>Lo</span> 56<span>°</span></span>
"""
numbers = re.findall(r"\d+", html, re.X|re.M|re.S)
print numbers
--output:--
['79', '56']
使用BeautifulSoup:
from bs4 import BeautifulSoup
html = """
<strong class="temp">
79
<span>°</span>
</strong>
<span class="low">
<span>Lo</span>
56
<span>°</span>
</span>
"""
soup = BeautifulSoup(html)
low_span = soup.find('span', class_="low")
for string in low_span.stripped_strings:
print string
--output:--
Lo
56
°