我正在尝试从网络上读取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 page时,我会打印整个网页。
我想从中提取一些信息,(例如"SILVER PASSBOOK ACCOUNT"
并从中获取费率),我在解析这个html文档时遇到了一些困难。
答案 0 :(得分:8)
不建议使用RE来匹配XML / HTML。然而,它有时可以工作。最好使用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 site。 easy_install
或pip
程序应该能够安装它。
答案 1 :(得分:3)
可以使用regexp来获取所需的数据:
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
模式。
答案 2 :(得分:1)
您也可以尝试Grablib。 和/或你可以使用XPath(有/没有Grab)。可能以后会对你有所帮助,这里有一些例子:
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'
祝你好运。