2013-09-11 65 views
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] 

這完美的作品。我遇到的問題是試圖從該行代碼中提取'56'。自從第一個'< span''在行中找到'79'後,我無法在'< span>'和'</span>之間進行拆分。有沒有辦法告訴腳本尋找第二次出現'< span>'?

感謝您的幫助!

回答

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一個真正的解析器。

+0

真棒。謝謝。這僅僅是爲了我自己的目的,沒有什麼重要的。儘管我可能會檢查BeautifulSoup。再次感謝。 – hunter21188

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 
° 
+0

謝謝7stud。如果我決定使用BeautifulSoup,這將會很有幫助。 – hunter21188

相關問題