2013-07-01 95 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)