簡體   English   中英

使用python從網頁讀取值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM