Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python从网页读取值_Python - Fatal编程技术网

使用python从网页读取值

使用python从网页读取值,python,Python,我试图将html页面中的值读入python脚本中的变量。我已经找到了一种使用urllib将页面下载到本地文件的方法,可以使用bash脚本提取值,但我想在Python中尝试一下 import urllib urllib.urlretrieve('http://url.com', 'page.htm') 该页面包含以下内容: <div name="mainbody" style="font-size: x-large;margin:auto;width:33;"> <b>&

我试图将html页面中的值读入python脚本中的变量。我已经找到了一种使用urllib将页面下载到本地文件的方法,可以使用bash脚本提取值,但我想在Python中尝试一下

import urllib
urllib.urlretrieve('http://url.com', 'page.htm')
该页面包含以下内容:

<div name="mainbody" style="font-size: x-large;margin:auto;width:33;">
<b><a href="w.cgi?hsn=10543">Plateau (19:01)</a></b>
<br/> Wired: 17.4
<br/>P10 Chard: 16.7
<br/>P1 P. Gris: 17.1
<br/>P20 Pinot Noir: 15.8-
<br/>Soil Temp : Error
<br/>Rainfall: 0.2<br/>
</div>


有线:17.4 P10字符:16.7
P1 P.Gris:17.1
P20黑比诺:15.8-
土壤温度:错误
降雨量:0.2
我需要有线线路的17.4值

有什么建议吗


谢谢

< p>你可以通过文件逐行使用find或正则表达式检查你需要的值,或者你可以考虑使用SoRy来检索和解析链接。

< P>从不使用<代码> URLRebug()/<代码>开始;您需要的是数据,而不是文件

接下来,使用HTML解析器。非常适合从HTML中提取文本

使用
urllib2
检索页面将是:

from urllib2 import urlopen

response = urlopen('http://url.com/')
然后将数据读入BeautifulSoup:

from bs4 import BeautifulSoup

soup = BeautifulSoup(response.read(), from_encoding=response.headers.getparam('charset'))
那里的
from_encoding
部分将告诉BeautifulSoup web服务器告诉您对页面使用的编码;如果web服务器未指定此选项,则BeautifulSoup将为您做出有根据的猜测

现在,您可以搜索您的数据:

for line in soup.find('div', {'name': 'mainbody'}).stripped_strings:
    if 'Wired:' in line:
        value = float(line.partition('Wired:')[2])
        print value
对于演示HTML代码段,它提供:

>>> for line in soup.find('div', {'name': 'mainbody'}).stripped_strings:
...     if 'Wired:' in line:
...         value = float(line.partition('Wired:')[2])
...         print value
... 
17.4

这就是所谓的web抓取,Python中有一个非常流行的库,它叫做
Beautiful Soup

如果您想使用urllib/urllib2,可以使用
正则表达式


使用regex,您基本上使用所需值的周围上下文作为键,然后去掉键。因此,在这种情况下,您可以将“Wired:”与下一个换行符匹配,然后去掉“Wired:”和换行符。

@beroe:OP使用的函数具有签名
urlretrieve(url,filename)
page.html
是存储页面的文件名,而不是URL的一部分。