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% でテーブルを見つけることができますが、エラーをスローするものもあります。たとえば、このドキュメントは表が見つからないものの 1 つですが (re.compile 文字列に対して CTRL+F を実行すると、ドキュメント内のセクションを見つけることができます)、同じ会社のこのドキュメントは次のようになります。同じ HTML フォーマットで良い結果が得られます。
何か案は?
編集: が問題になる可能性がありますが、別の問題もあります。 を含めないように検索文字列を短くすると、やはり失敗します。
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>
を削除しながら、この問題を回避する方法はありますか?
EDIT 2: 以下の回答は、私が抱えていた問題を解決したので、回答済みとしてマークしました。とはいえ、文字列内のランダムな改行の別の根本的な問題があったため、正規表現を変更して、スペースだけでなくすべての単語間の '\s+' をチェックしました。このような問題で行き詰まった場合は、必ずこのエラーの HTML コードを確認してください。