0

我正在使用 line.rfind() 在 html 页面中查找某一行,然后我拆分该行以提取单个数字。例如:

position1 = line.rfind('Wed')

这会找到这行特定的 html 代码:

 <strong class="temp">79<span>&deg;</span></strong><span class="low"><span>Lo</span> 56<span>&deg;</span></span>

首先我想拉出'79',这是用以下代码完成的:

if position1 > 0 :
        self.high0 = lines[line_number + 4].split('<span>')[0].split('">')[-1]

这完美地工作。我遇到的问题是试图从那行 html 代码中提取“56”。我无法在“<span>”和“</span>”之间拆分它,因为它在该行中找到的第一个“<span>”在“79”之后。有没有办法告诉脚本寻找第二次出现的“<span>”?

谢谢你的帮助!

4

2 回答 2

2

除了对使用正则表达式解析 HTML 的担忧之外,我发现正则表达式对于从有限的机器生成的 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 这样的真正解析器。

于 2013-09-11T03:54:10.997 回答
1
import re

html = """
 <strong class="temp">79<span>&deg;</span></strong><span class="low"><span>Lo</span> 56<span>&deg;</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>&deg;</span>
</strong>
<span class="low">
   <span>Lo</span> 
   56
   <span>&deg;</span>
</span>
"""

soup = BeautifulSoup(html)
low_span = soup.find('span', class_="low")

for string in low_span.stripped_strings:
    print string

--output:--
Lo
56
°
于 2013-09-11T03:54:34.017 回答