2012-03-20 17 views
12

HTMLファイルからデータを抽出する必要があります。問題のファイルは、おそらく自動的に生成されます。これらのファイルのコードをPastebin:http://pastebin.com/9Nj2Edfvにアップロードしました。これは実際のページへのリンクです:http://eur-lex.europa.eu/Notice.do?checktexts=checkbox&val=60504%3Acs&pos=1&page=1&lang=en&pgs=10&nbl=1&list=60504%3Acs%2C&hwords=&action=GO&visu=%23texteBeautifulSoupとPythonでHTMLファイルからデータを抽出する

抽出する必要があるデータは、異なる見出しの下にあります。

これは私がこれまで持っているものです。

from BeautifulSoup import BeautifulSoup 
ecj_data = open("data\ecj_1.html",'r').read() 

soup = BeautifulSoup(ecj_data) 

celex = soup.find('h1') 
auth_lang = soup('ul', limit=14)[13].li 
procedure = soup('ul', limit=20)[17].li 

print "Celex number:", celex.renderContents(), 
print "Authentic language:", auth_lang 
print "Type of procedure:", procedure 

は、私はそれがファイルecj_1.htmlを開く理由で、ローカルに保存されているすべてのデータを持っています。

Celex番号とAuthentic言語は多少良く動作します。

celexは

"Celex number: 
61977J0059" 

auth_langは、私は、H1タグ(終わりではないブレーク)の内容だけを必要とする"Authentic language: <li>French</li>"

を返します。返します

[また、私は<li> - タグ単に「フランス語」、及びませんを返すことauth_langを必要としています。] これはもはや問題ではありません。私は ".text"を "auth_lang"の最後に追加することができたことに気付きました。私はちょうどそれが「予備判決のためのリファレンス」を返却する必要があるとして、非常に間違っている

Type of procedure: <li> 
    <strong>Type of procedure:</strong> 
    <br /> 
    Reference for a preliminary ruling 
    </li> 

:一方のリターンに

手順これ。

私はこれを達成する方法はありますか?

第二編集: 私はcelex = soup('h1', limit=2)[0]celex = soup.find('h1')を交換し、印刷celexへ.textを追加しました。

答えて

3

見つかったシーケンスのそれぞれの内容はリストで、最初の2文字は長さ1です。しかし、procedureは5エレメント長で、後ろにあるエントリ(この場合)は4番目です。私もsplitlines()を使って改行を取り除いています。

print "Celex number:", celex.contents[0].splitlines()[1] 
print "Authentic language:", auth_lang.contents[0].splitlines()[0] 
print "Type of procedure:", procedure.contents[4].splitlines()[1] 

出力:

Celex number: 61977J0059 
Authentic language: French 
Type of procedure: Reference for a preliminary ruling 
+0

フラクセル:ありがとうございました!それは魅力のように働く。 このファイルの出力をどうにかしてデータベースに転送することです。私はあなたが後で何かを壊す可能性があるので、改行を取り除く方法を私に教えたとき、あなたが将来の問題を解決したかもしれないと信じています。 もう一度おねがいします! – A2D2

関連する問題