2013-07-25 23 views
7

私はBeautifulSoupでHTML文書からテキストを取得しようとしています。私にとって非常に矛盾したケースでは、それは奇妙で興味深い結果をもたらします。ある時点の後に、スープはテキスト内に余分なスペースがあります(スペースは次のものからすべての文字を区切ります)。私はその理由を見つけるためにウェブを検索しようとしましたが、反対のバグについての情報はまったくありませんでした。BeautifulSoupは予期しない余分なスペースを返します

なぜ起こったのか、またこの問題を解決する方法についてのヒントがありますか。

これは私が作成した、非常に基本的なコードです:

from bs4 import BeautifulSoup 

import urllib2 
html = urllib2.urlopen("http://www.beppegrillo.it") 
prova = html.read() 
soup = BeautifulSoup(prova) 
print soup 

は、そしてこれは、この問題が現れ始めるの結果から取られた行、行です:

値= \」ジュゼッペlabbate OGM?非vorremmo NUOVI uccelli chiamati lontre \ "> <入力のonmouseover = \" ヒント(」< CEN terclass = \ \ 'タイトル_ビデオの\ \' > <B> G iuseppelabbateo g m? V I U C C E L L I C、H、O、N個のO、N V O R R E Mは、M個のO、N、U、I M T IのL OのN t個のR E <

+2

なぜあなたは 'ultrasoup'を印刷していますか?それは「スープ」ではないでしょうか? – svineet

+0

他のウェブサイトでも同じ問題が発生しています。私はまだこれがBeautifulSoupの問題であるのか、根底にあるlxmlなのかを解明しようとしています。ソフトウェアは32ビットPythonで問題なく動作し、64ビットで失敗します。 – Matthias

+0

私は 'ultrasoup'、ちょっとしたエラーをお詫びします。もちろん、正しいコードは 'print soup'でした –

答えて

10

これはLXMLのHTMLパーサーのバグであると考えています。 試してみてください:

from bs4 import BeautifulSoup 

import urllib2 
html = urllib2.urlopen ("http://www.beppegrillo.it") 
prova = html.read() 
soup = BeautifulSoup(prova.replace('ISO-8859-1', 'utf-8')) 
print soup 

この問題の回避策はどれですか。 問題はlxml 3.0 alpha 2とlxml 2.3.6で修正されていると思いますので、新しいバージョンにアップグレードする必要があるかどうかチェックする価値があります。

あなたはそれが最初にここに提出されたバグの詳細たい場合:このことができます

https://bugs.launchpad.net/beautifulsoup/+bug/972466

希望を、

ヘイデン

+0

これは完璧に、感謝しています。この場合、置き換えが何を置き換えるのか尋ねることはできますか?さらなる質問:beautifulsoupは常にlxml htmlパーサーを採用していますか?そうでない場合、私はなぜそれを使用していますか、どのパーサーを採用するのかをどのように制御できますか?私はこれらが疑似質問として現れるかもしれないと思うが、私はhtml解析の初心者です。 –

+0

@Hayden:醜いですが、実用的な解決策です。ありがとうございました。 – Matthias

4

あなたはhtml.parserとしてパーサを指定することができます。

soup = BeautifulSoup(prova, 'html.parser') 

また、あなたはhtml5パーサを指定することができます。

soup = BeautifulSoup(prova, 'html5') 

はまだhtml5パーサをインストールしていないことがありますか?ターミナルからそれをインストールします。

sudo apt-get install python-html5lib 

xmlパーサを使用することができる(soup = BeautifulSoup(prova, 'xml'))がありますが、class="foo bar"のようなmulti-valued attributesでいくつかの違いを見ることができます。

関連する問題