1

このページでアクセスできる、元素の選択された物理的性質 (たとえば、原子化エンタルピー、気化エンタルピー、気化熱、沸点) の表を作成したいと思います。

手動で行うのは非常に面倒であり、インターネット上でそのようなデータの機械処理に適したソースを他に見つけられませんでした。

私はPythonでそれを行う方法を学ぼうとしていました(Python / NumPy / Pandasで書かれた他のコードにこのデータを使用したいからです).

urllib2 を使用して Web ページの HTML コードをダウンロードすることができました。また、ElementTree や MiniDom などの HTML/XML パーサーの使用方法を学ぼうとしていました。ただし、Web プログラミングと HTML/XML 処理の経験はありません。

4

2 に答える 2

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 を使用して必要なフィールドを解析できます。

于 2013-07-01T14:50:56.360 に答える
0

ありがとう、ラフォニック

動作させるにはコードを少し変更する必要がありましたが、キックスタートに感謝します。このコードは機能しています:

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()通常の expersionだけを使用します。このような

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)
于 2013-07-01T15:26:44.577 に答える