[英]Read value from web page using 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><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>
我需要Wired:行中的17.4值
有什么建議么?
謝謝
從不使用urlretrieve()
; 您需要數據,而不是文件。
接下來,使用HTML解析器。 BeautifulSoup非常適合從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服務器未指定此名稱,則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
這被稱為網頁抓取,並且有一個非常流行的庫可以在Python中執行此操作,它被稱為Beautiful Soup
:
http://www.crummy.com/software/BeautifulSoup/
如果您想使用urllib / urllib2做到這一點, regular expressions
可以使用regular expressions
來完成:
http://docs.python.org/2/library/re.html
使用正則表達式,您基本上將所需值的周圍上下文用作鍵,然后將鍵剝離。 因此,在這種情況下,您可以將“ Wired:”與下一個換行符匹配,然后剝離“ Wired:”和換行符。
您可以使用find或正則表達式逐行瀏覽文件以檢查所需的值,也可以考慮使用scrapy來檢索和解析鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.