将数据从html页面解析为表格

时间:2013-07-01 14:07:18

标签: python web-scraping html-parsing webpage

我想制作所选元素物理性质的表格(例如雾化焓,汽化焓,汽化热,沸点),可在this page上获取。

手动完成这是一个巨大的痛苦,我没有在互联网上找到任何其他机器处理友好的此类数据来源。

我试图学习如何在Python中完成它(因为我想将这些数据用于我用Python / NumPy / Pandas编写的其他代码)。

我能够使用urllib2下载网页HTML代码,我试图学习如何使用像ElementTree或MiniDom这样的HTML / XML解析器。但是我没有Web编程和HTML / XML处理的经验。

2 个答案:

答案 0 :(得分: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字符串,并使用dict来解析require字段。

答案 1 :(得分: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)