2013-07-01 100 views
1

我希望在this page上可以找到元素选择的物理性质(例如雾化焓,蒸发焓,蒸发热,沸点)的表格。从html页面解析数据到表

手工操作是一个巨大的痛苦,我没有在互联网上找到任何其他机器处理友好的数据源。我试图学习如何在Python中做到这一点(因为我想用我的其他代码使用Python/NumPy/Pandas编写的这些数据)。

我能够使用urllib2下载网页HTML代码,并试图学习如何使用ElementTree或MiniDom等HTML/XML解析器。不过,我没有使用网页编程和HTML/XML处理的经验。

+0

使用BeautifulSoup这种事情,它比标准库中可用的解析器更容易使用。 – michaelmeyer

回答

0

使用lxml的xpath支持,您可以轻松地解析数据。这里有一个例子解析雾化焓

import lxml.html 
import urllib2 

html = urllib2.urlopen("http://http://environmentalchemistry.com/yogi/periodic/W.html").read() 
doc = lxml.html.document_fromstring(html) 
result = doc.xpath("/html/body/div[2]/div[2]/div[1]/div[1]/ul[7]/li[8]") 

你可以动态生成不同的元素的XPath字符串,并使用字典解析需要的字段。

0

谢谢raphonic

修改代码稍微得到它的工作有必要,但感谢Kickstart中。此代码的工作:

import lxml.html 
import lxml.etree 
import urllib2 

opener = urllib2.build_opener() 
opener.addheaders = [('User-agent', 'Mozilla/5.0')] 
infile = opener.open('http://environmentalchemistry.com/yogi/periodic/W.html') 
html = infile.read() 

doc = lxml.html.document_fromstring(html) 
result = doc.xpath("/html/body/div[2]/div[1]/div[1]/div[1]/ul[7]/li[8]") 
print lxml.etree.tostring(result[0]) 

但也许它不是最好的一个

反正。因为不同元素的页面结构不完全相同,所以我可能会使用简单的string.find()定期扩展。像这样

import urllib2 
opener = urllib2.build_opener() 
opener.addheaders = [('User-agent', 'Mozilla/5.0')] 
infile = opener.open('http://environmentalchemistry.com/yogi/periodic/W.html') 
page = infile.read() 

i = page.find("Heat of Vaporization") 
substr = page[i:i+50] 
print substr 

import re 
non_decimal = re.compile(r'[^\d.]+') 
print non_decimal.sub('', substr)