2017-07-09 91 views
0

我正在尝试编写Python代码以从本地Arduino服务器读取简单的温度值。从Arduino网络服务器读取值

这是我的源页面:

<font color=black size=7>Senzorji DS18B20<font color=black size=7><br /> 
<font color=black size=7>Kurnica: [26.00] &#176; 
C 
<font color=green size=7><font color=black size=7><br /> 
<font color=black size=7>Zunaj: [33.13] &#176; 
C 
<font color=green size=7><font color=black size=7><br /> 
<font color=black size=7>Garaza: [27.62] &#176; 
C 
<font color=black size=7><br /> 
<br /> 
Senzor DHT11 - Garaza<font color=black size=7><br /> 
<font color=black size=7>Temperatura v garazi: [24.00] &#176; 
C 
<font color=green size=7><font color=black size=7><br /> 
<font color=black size=7>Vlaga v garazi: [17.00] % 
<br /> 
<br /> 
Senzor DHT11 - Stara kurilnica<font color=black size=7><br /> 
<font color=black size=7>Temperatura v stari kurilnici: [23.00] &#176; 
C 
<font color=green size=7><font color=black size=7><br /> 
<font color=black size=7>Vlaga v stari kurilnici: [14.00] % 
<font color=green size=7> 

我想读在方括号与美丽的汤,但没有运气的价值。我找不到我的情况。所有的例子都比较复杂;我很简单,但我不知道。

我正在使用树莓派。

使用PHP,我写了简单的代码。它改变了我,它的工作。 这是我的PHP代码:

function get_string_between($string, $start, $end){ 
     $string = " ".$string; 
     $ini = strpos($string,$start); 
     if ($ini == 0) return ""; 
     $ini += strlen($start); 
     $len = strpos($string,$end,$ini) - $ini; 
     return substr($string,$ini,$len); 
} 

$arduino91 = file_get_contents("http://192.168.5.91/"); 
$radiator = get_string_between($arduino91, "(povratek): [", "]"); 
$garaza = get_string_between($arduino91, "Garaza: [", "]"); 
$garazadht = get_string_between($arduino91, "Temperatura v garazi: [", "]"); 
$garazavl = get_string_between($arduino91, "Vlaga v garazi: [", "]"); 
$kurnica = get_string_between($arduino91, "Kurnica: [", "]"); 

echo "Temperatura v kurilnici: $kuriltemp"."<br>"; 
echo "Pec: $pec1"."<br>"; 

我该如何在Python中编写这样的代码?

回答

0

您可以使用正则表达式直接从html/text提取[..]之间的所有值,即re.findall()

假设你已经获取该网页的Arduino的服务器,也许使用requests库:

import re 
values = re.findall('\[([\d.]+)\]', html) 

对于html从你的榜样,values变量:

import requests 
html = requests.get("http://127.0.0.1/").text 
# now in html is something like: "<font color=black size=7>...." 

您可以提取这些值将包含:

['26.00', '33.13', '27.62', '24.00', '17.00', '23.00', '14.00'] 

现在,你可以说:

kurnica = values[0] 
garaza = values[2] 
... 

或者,如果你想一次提取所有的值,你可以用解构赋值,就像这样:

kurnica, zunaj, garaza, t_garaza, h_garaza, t_kuril, h_kuril = values 
+0

你会写整个代码? – CBox

+0

这里你去(见更新的答案)。 – randomir

+0

@CBox,你设法使它工作?还有什么不清楚吗? – randomir

0

现在我用这个代码和工作.. 。

import urllib 
f = urllib.urlopen("http://192.168.5.91") 
s = f.read() 
f.close() 

def find_between(s, first, last): 
    try: 
     start = s.index(first) + len(first) 
     end = s.index(last, start) 
     return s[start:end] 
    except ValueError: 
     return "" 

print find_between(s, "Zunaj: [", "]") 

现在有问题find_between如何declarated漂浮 “测试1”

我必须写诗e为每个集合,这部分与def ???

def find_between1(s, first, last): 
    try: 
     start = s.index(first) + len(first) 
     end = s.index(last, start) 
     return s[start:end] 
    except ValueError: 
     return "" 

print find_between1(s, "Zunaj1: [", "]") 

我认为像它在我的PHP

$arduino91 = file_get_contents("http://192.168.5.91/"); 
$radiator = get_string_between($arduino91, "(povratek): [", "]"); 
$garaza = get_string_between($arduino91, "Garaza: [", "]"); 
$garazadht = get_string_between($arduino91, "Temperatura v garazi: [", "]"); 
$garazavl = get_string_between($arduino91, "Vlaga v garazi: [", "]"); 
$kurnica = get_string_between($arduino91, "Kurnica: [", "]");