3

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 の値が必要です

助言がありますか?

ありがとう

4

3 に答える 3

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部分は、Web サーバーがページに使用するように指示したエンコーディングを 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
于 2013-10-04T07:05:23.477 に答える
4

これは Web スクレイピングと呼ばれ、Python でこれを行うための非常に人気のあるライブラリがありますBeautiful Soup

http://www.crummy.com/software/BeautifulSoup/

urllib/urllib2 でそれを行いたい場合は、次を使用してそれを実現できますregular expressions

http://docs.python.org/2/library/re.html

正規表現を使用すると、基本的に目的の値の周囲のコンテキストをキーとして使用してから、キーを取り除きます。したがって、この場合、「Wired:」から次の改行文字まで一致させてから、「Wired:」と改行文字を取り除くことができます。

于 2013-10-04T07:13:36.340 に答える