如何使用 BeautifulSoup 从 SEC N-Q 文档中提取 table
How to extract table from SEC N-Q doc using BeautifulSoup
(python 2.7, BeautifulSoup4)
我正在尝试从 SEC N-Q 文档中提取 table 内容。在此处示例 html:https://www.sec.gov/Archives/edgar/data/36405/000093247115006447/indexfunds_final.htm
该文件根本没有标签。我想搜索 'C. Futures Contract' 部分并寻找下一个 < table > 并提取 < tr > 中的内容。一份文档中也出现了多次 'C. Futures Contract'。
我尝试了以下代码,但没有任何结果。
import requests, re
from bs4 import BeautifulSoup
r = requests.get("https://www.sec.gov/Archives/edgar/data/36405/000093247115006447/indexfunds_final.htm")
futures = soup.find_all(re.compile('C. Futures Contract'))
print futures
[ ]
首先,如果您通过文本搜索,请使用 text
参数(从 bs 4.4.0 开始,该参数被命名为 string
)。
除此之外,对于每个 futures
部分,使用 find_next()
查找下一个 table
元素。
工作代码:
import re
import requests
from bs4 import BeautifulSoup
response = requests.get("https://www.sec.gov/Archives/edgar/data/36405/000093247115006447/indexfunds_final.htm")
soup = BeautifulSoup(response.content)
futures = soup.find_all(text=re.compile('C. Futures Contract'))
for future in futures:
for row in future.find_next("table").find_all("tr"):
print [cell.get_text(strip=True) for cell in row.find_all("td")]
(python 2.7, BeautifulSoup4)
我正在尝试从 SEC N-Q 文档中提取 table 内容。在此处示例 html:https://www.sec.gov/Archives/edgar/data/36405/000093247115006447/indexfunds_final.htm
该文件根本没有标签。我想搜索 'C. Futures Contract' 部分并寻找下一个 < table > 并提取 < tr > 中的内容。一份文档中也出现了多次 'C. Futures Contract'。
我尝试了以下代码,但没有任何结果。
import requests, re
from bs4 import BeautifulSoup
r = requests.get("https://www.sec.gov/Archives/edgar/data/36405/000093247115006447/indexfunds_final.htm")
futures = soup.find_all(re.compile('C. Futures Contract'))
print futures
[ ]
首先,如果您通过文本搜索,请使用 text
参数(从 bs 4.4.0 开始,该参数被命名为 string
)。
除此之外,对于每个 futures
部分,使用 find_next()
查找下一个 table
元素。
工作代码:
import re
import requests
from bs4 import BeautifulSoup
response = requests.get("https://www.sec.gov/Archives/edgar/data/36405/000093247115006447/indexfunds_final.htm")
soup = BeautifulSoup(response.content)
futures = soup.find_all(text=re.compile('C. Futures Contract'))
for future in futures:
for row in future.find_next("table").find_all("tr"):
print [cell.get_text(strip=True) for cell in row.find_all("td")]