4

WebのPythonモジュールからいくつかのデータを読み取ろうとしています。

私はなんとか読むことができましたが、このデータを解析して必要な情報を取得するのに少し苦労しました。

私のコードは以下の通りです。どんな助けでも大歓迎です。

#!/usr/bin/python2.7 -tt

import urllib
import urllib2

def Connect2Web():
  aResp = urllib2.urlopen("https://uniservices1.uobgroup.com/secure/online_rates/gold_and_silver_prices.jsp");
  web_pg = aResp.read();

  print web_pg

#Define a main() function that prints a litte greeting
def main():
  Connect2Web()

# This is the standard boilerplate that calls the maun function.
if __name__ == '__main__':
    main()

このWebページを印刷すると、Webページ全体が印刷されます。

私はそれからいくつかの情報を抽出したい(例えば"SILVER PASSBOOK ACCOUNT"、それからレートを取得したい)、私はこのhtmlドキュメントを解析するのにいくつかの問題を抱えています。

4

3 に答える 3

9

XML/HTML に一致させるために RE を使用することはお勧めしません。ただし、機能する場合もあります。HTML パーサーと DOM API を使用することをお勧めします。次に例を示します。

import html5lib
import urllib2

aResp = urllib2.urlopen("https://uniservices1.uobgroup.com/secure/online_rates/gold_and_silver_prices.jsp")
t = aResp.read()
dom = html5lib.parse(t, treebuilder="dom")
trlist = dom.getElementsByTagName("tr")
print trlist[-3].childNodes[1].firstChild.childNodes[0].nodeValue

反復しtrlistて興味深いデータを見つけることができます。

コメントから追加: html5libサードパーティ モジュールです。html5lib サイトを参照してください。easy_installまたはプログラムはそれpipをインストールできるはずです。

于 2012-04-08T09:39:12.207 に答える
4

正規表現を使用して必要なデータを取得することができます。

import urllib
import urllib2
import re

def Connect2Web():
  aResp = urllib2.urlopen("https://uniservices1.uobgroup.com/secure/online_rates/gold_and_silver_prices.jsp");
  web_pg = aResp.read();

  pattern = "<td><b>SILVER PASSBOOK ACCOUNT</b></td>" + "<td>(.*)</td>" * 4
  m = re.search(pattern, web_pg)
  if m:
    print "SILVER PASSBOOK ACCOUNT:"
    print "\tCurrency:", m.group(1)
    print "\tUnit:", m.group(2)
    print "\tBank Sells:", m.group(3)
    print "\tBank Buys:", m.group(4)
  else:
    print "Nothing found"

re.compileループでマッチを行っている場合は、パターンを忘れないでください。

于 2012-04-08T09:05:02.360 に答える
1

また、Grablibを試すこともできます。および/またはXPathを使用できます(グラブあり/なし)。後で役立つかもしれません。いくつかの例を次に示します。

g = Grab()
g.go(address)

user_div = g.xpath('//*/div[@class="user_profile"]') # main <div> for parse
country = user_div.find('*/*/a[@class="country-name"]')
region  = user_div.find('*/*/a[@class="region"]')    # look for <a class="region">
city    = user_div.find('*/*/a[@class="city"]')

friends = [ i.text_content() for i in user_div.findall('dl[@class="friends_list"]/dd/ul/li/a[@rel="friend"]') ]

# and another ability, i.e. you have 2 tags: 
# <tr> <td>Text to grab</td> <td>if only that tag contains this text</td> </tr>

val = user_div.xpath(u"dl/dt[contains(text(),'%s')]/../dd/text()" % 'if only that tag contains this text')
# print val[0] <- will contain 'Text to grab'

幸運を。

于 2012-04-08T10:40:13.647 に答える