我正在为使用 BeautifulSoup4 的几家公司从几份包含董事签名的文件中提取一个特定的表格。我的程序在包含表格的部分上方找到一个标题,然后从该位置向下计数两个表格以找到正确的表格(文件是政府文件意味着该格式几乎在所有情况下都适用)。目前,这就是我的做法:
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% 的搜索表,但有些只是抛出错误。例如,此文档是找不到表的文档之一(您可以通过对 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>
有什么办法可以解决这个问题,同时仍然删除 ?
编辑2:下面的答案确实解决了我遇到的问题,所以我将其标记为已回答。也就是说,字符串中存在随机换行符的另一个潜在问题,因此我修改了我的正则表达式以检查所有单词之间的 '\s+' 而不仅仅是空格。如果遇到此类问题,请务必检查此错误的 HTML 代码。