2017-01-29 5 views
0

私はこのようなファイルのPython-美しいスープ「find_all」だけの結果を返す

<a> 
    <b>1</b> 
</a> 
<a> 
    <b>2</b> 
</a> 
<a> 
    <b>3</b> 
</a> 

を持っていると私はので、私はこのコードを書いた内のすべての情報が欲しい:

from bs4 import BeautifulSoup 
infile = open("testA.xml",'r') 
contents = infile.read() 
soup=BeautifulSoup(contents,'xml') 
result = soup.find_all('a') 
print(result) 

出力を:

[<a> 
<b>1</b> 
</a>] 

ファイルからすべての情報を取得できる理由がわかりません。

[<a> 
<b>1</b> 
</a>, 
<a> 
<b>2</b> 
</a>, 
<a> 
<b>3</b> 
</a>] 

はすべて

+2

は、あなたのファイルは、XMLヘッダを含めることはできませんか? –

+0

yaそうです、私はファイルを書く関数があり、xml-headerを書くのを忘れました@WillemVanOnsem – 1pa

+0

@ 1pati2: 'lxml'を使うこともできます。その場合、ヘッダーは必要ありません。 –

答えて

2

ファイルが本当にXMLファイルの場合は、XMLヘッダーが含まれている必要があります。

されていない場合、あなたはパーサとしてlxmlを使用することができます:あなたがファイルから読み込まれたときに、あなたがして、それがよりエレガントにすることができますので、あなたがより良い、コンテキスト(with)を使用

from bs4 import BeautifulSoup 
infile = open("testA.xml",'r') 
contents = infile.read() 
soup=BeautifulSoup(contents,'lxml') 
result = soup.find_all('a') 
print(result)

マインド:

from bs4 import BeautifulSoup 
with open("testA.xml",'r') as infile: 
    contents = infile.read() 
    soup=BeautifulSoup(contents,'lxml') 
    result = soup.find_all('a') 
    print(result)

これはwithスコープの飛び出し一度ファイルを閉じるにはPythonを強制します。 python3でこれを実行する

ができます:

$ python3 
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from bs4 import BeautifulSoup 
>>> infile = open("testA.xml",'r') 
>>> contents = infile.read() 
>>> soup=BeautifulSoup(contents,'lxml') 
>>> result = soup.find_all('a') 
>>> result 
[<a> 
<b>1</b> 
</a>, <a> 
<b>2</b> 
</a>, <a> 
<b>3</b> 
</a>] 
+0

ありがとう@ウィレム・ヴァン・オンセム – 1pa

1

主な問題は、あなたがルートタグを持っていないということですありがとう:私はこのような何かをしたいです。 xmlファイルを

`<?xml version="1.0" encoding="utf-8"?> 
<content> 
    <a> 
     <b>1</b> 
    </a> 
    <a> 
     <b>2</b> 
    </a> 
    <a> 
     <b>3</b> 
    </a> 
</content>` 

に変更してください。

関連する問題