gpt4 book ai didi

python - BeautifulSoup table 抓取只是有时会抓取

转载 作者:行者123 更新时间:2023-12-01 03:52:49 24 4
gpt4 key购买 nike

我正在努力从几个文件中提取一个特定的表格,其中包含几家使用 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% 搜索的表格,但有些只是抛出错误。例如,this document是找不到该表的其中之一(您可以通过对 re.compile 字符串执行 CTRL+F 来找到文档中的该部分),但是 this document来自同一家公司并且看起来相同的 HTML 格式会产生积极的结果。

有什么想法吗?

编辑:   可能是一个问题,但还有另一个问题。缩短搜索字符串以不包含   仍然会失败。

EDIT2:有时似乎会发生潜在的错误。我尝试打印出 HTML 数据变量并得到以下结果:

<HTML><HEAD>
<TITLE>Access Denied</TITLE>
</HEAD><BODY>
<H1>Access Denied</H1>

You don't have permission to access "http&#58;&#47;&#47;www&#46;sec&#46;gov&#47;Archives&#47;edgar&#47;data&#47;1800&#47;000110465907013496&#47;a07&#45;1583&#95;110k&#46;htm" on this server.<P>
Reference&#32;&#35;18&#46;ee9a1645&#46;1466687980&#46;5cc0b4f
</BODY>
</HTML>

有什么方法可以解决这个问题,同时仍然删除  ?

编辑2:下面的答案确实解决了我遇到的问题,所以我已将其标记为已回答。也就是说,字符串中存在另一个随机换行符的潜在问题,因此我修改了正则表达式以检查所有单词之间的“\s+”而不仅仅是空格。 如果您遇到这样的问题,请务必检查 HTML 代码是否存在此错误。

最佳答案

问题出在 Section13 之间的  :

<font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pursuant to the requirements of Section&nbsp;13 or 15(d) of the Securities Exchange Act of 1934, Abbott Laboratories has duly caused
this report to be signed on its behalf by the undersigned, thereunto duly authorized. </font>

我会使用 searching functionreplace the &nbsp; with a regular space检查 .text 属性时:

import requests
from bs4 import BeautifulSoup


# url = "https://www.sec.gov/Archives/edgar/data/1800/000110465907013496/a07-1583_110k.htm"
url = "https://www.sec.gov/Archives/edgar/data/1800/000104746916010246/a2227279z10-k.htm"
response = requests.get(url, headers={
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"
})

data = response.text
soup = BeautifulSoup(data, "lxml")

text_to_search = "Pursuant to the requirements of Section 13"
p = soup.find(lambda elm: elm.name == "p" and elm.text and text_to_search in elm.text.replace(u'\xa0', ' '))
tables = p.findNext('table').findNext('table').strings

关于python - BeautifulSoup table 抓取只是有时会抓取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37975348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com