私はBeautifulSoup4を使用しているいくつかの企業のために、取締役の署名を保持するいくつかの文書から特定のテーブルを抽出するよう努めています。私のプログラムは、テーブルを保持するセクションの上に見出しを見つけ、その場所から2つのテーブルを数えて正しいテーブルを見つけます(政府文書とは、ほとんどすべてのケースでそのフォーマットが正しいことを意味します)。現在のところ、これは私がそれをやっている方法です。このコードで美しいスープテーブルの掻き取りは、ある程度の時間を削るだけです
soup=BeautifulSoup(theDocument)
try:
tables = soup.find(text=re.compile("Pursuant to the requirements of Section 13")).findNext('table').findNext('table').strings
except AttributeError as e:
#deal with error, output failed URL to file
、私は私の検索の約70%のためのテーブルを見つけることだが、いくつかは、単にエラーを投げます。たとえば、this documentはテーブルを見つけられないものの1つです(re.compile文字列のCTRL + Fキーを押して文書内のセクションを見つけることができます)。しかし、同じ会社のthis documentと同じように見えますHTMLフォーマットは肯定的な結果をもたらす。
アイデア?
編集:& nbsp問題が発生する可能性がありますが、もう1つ問題があります。 & nbspを含まないように検索文字列を短くすると、まだエラーが発生します。
EDIT2:時々発生する基本的なエラーがあるようです。私は、HTMLデータ変数をプリントアウトしようとしたし、次のように得た:
<HTML><HEAD>
<TITLE>Access Denied</TITLE>
</HEAD><BODY>
<H1>Access Denied</H1>
You don't have permission to access "http://www.sec.gov/Archives/edgar/data/1800/000110465907013496/a07-1583_110k.htm" on this server.<P>
Reference #18.ee9a1645.1466687980.5cc0b4f
</BODY>
</HTML>
この問題を回避任意の方法を、まだ& NBSPを除去しながら?
編集2:以下の回答は、私が持っていた問題を解決したので、回答としてマークしました。つまり、文字列にランダムな改行があるという根本的な問題がもう一つあったので、スペースの代わりにすべての単語の間で '\ s +'をチェックする正規表現を変更しました。 このような問題が発生した場合は、このエラーのHTMLコードを確認してください。
を別のパーサーを使用してみましたが?例: 'BeautifulSoup(theDocument、 'html.parser')' – Jkdc
@Jkdc答えの1つでは、lxmlをセカンダリパーサーとして使用しようとしました。それは解決されたよりも多くのエラーを引き起こしました:)それは言われている、それは最初の試みがキャッチしない場合を拾うために働くかもしれません。 – Retroflux
@ Jkdcもしあなたがそれに亀裂を入れたいのであれば、問題は発展しました。 – Retroflux