2013-07-01 2 views
1

Я хотел бы сделать таблицу выбранных физических свойств элементов (например, энтальпия атомизации, энтальпия эмальпии испарения, теплота испарения, точка кипения), которые доступны по адресу this page.Анализ данных из html-страницы в таблицу

Это огромная боль, чтобы сделать это вручную, и я не нашел другого дружественного к машинам источника таких данных в Интернете.

Я пытался научиться делать это на Python (потому что я хочу использовать эти данные для моего другого кода, написанного на Python/NumPy/Pandas).

Мне удалось загрузить HTML-код веб-страницы с urllib2, и я пытался научиться использовать некоторый парсер HTML/XML, такой как ElementTree или MiniDom. Однако у меня нет опыта работы с веб-программированием и обработкой HTML/XML.

+0

Используйте BeautifulSoup для такого рода вещей, это проще в использовании, чем синтаксические анализаторы, доступные в стандартной библиотеке lib. – michaelmeyer

ответ

0

Используя поддержку xpath lxml, вы можете легко анализировать данные. Вот пример разбора атомизации энтальпии

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 для разбора требует поло.

0

Спасибо, raphonic

Это было необходимо изменить код немного, чтобы получить его работу, но спасибо за кикстарт. Этот код работает:

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) 
Смежные вопросы