【发布时间】:2020-04-19 04:01:22
【问题描述】:
我正在尝试从最新的SEC EDGAR Schedule 13 forms 文件中提取信息。
以备案链接为例:
1)Saba Capital_27-Dec-2019_SC13
我试图提取的信息(以及包含该信息的归档部分)
1) 报告人姓名:Saba Capital Management, L.P.
<p style="margin-bottom: 0pt;">NAME OF REPORTING PERSON</p>
<p style="margin-top: 0pt; margin-left: 18pt;">Saba Capital Management GP, LLC<br><br/>
2) 发行人名称:WESTERN ASSET HIGH INCOME FUND II INC
<p style="text-align: center;"><b><font size="5"><u>WESTERN ASSET HIGH INCOME FUND II INC.</u></font><u><br/></u>(Name of Issuer)</b>
3) CUSIP 号码:95766J102(设法获得)
<p style="text-align: center;"><b><u>95766J102<br/></u>(CUSIP Number)</b>
4) 以数量表示的班级百分比:11.3%(设法获得)
<p style="margin-bottom: 0pt;">PERCENT OF CLASS REPRESENTED BY AMOUNT IN ROW (11)</p>
<p style="margin-top: 0pt; margin-left: 18pt;">11.3%<br><br/>
5) 需要提交本声明的事件日期:2019 年 12 月 24 日
<p style="text-align: center;"><b><u>December 24, 2019<br/></u>(Date of Event Which Requires Filing of This Statement)</b>
。
import requests
import re
from bs4 import BeautifulSoup
page = requests.get('https://www.sec.gov/Archives/edgar/data/1058239/000106299319004848/formsc13da.htm')
soup = BeautifulSoup(page.text, 'xml')
## get CUSIP number
CUSIP = re.findall(r'[0-9]{3}[a-zA-Z0-9]{2}[a-zA-Z0-9*@#]{3}[0-9]', soup.text)
### get %
regex = r"(?<=PERCENT OF CLASS|Percent of class)(.*)(?=%)"
percent = re.findall(r'\d+.\d+', re.search(regex, soup.text, re.DOTALL).group().split('%')[0])
如何从归档中提取这 5 条信息?在此先感谢
【问题讨论】:
-
CUSIP =
soup.select("body > document > type > sequence > filename > description > text > p:nth-child(9) > b > u")get_text() -
请确认所有项目是否在相同位置,以防您将代码应用于多个页面。
-
在任何情况下我都不会对 html 使用正则表达式(四处搜索以了解原因)。最简单的方法是使用 xpath,这需要使用 lxml 而不是 beautifulsoup。我有兴趣,我可以发布答案。
-
@αԋɱҽԃαмєяιcαη 我不认为所有的项目都在同一个位置。是的,我想将它应用到其他页面
-
@JackFleeting 是的,请
标签: python regex beautifulsoup finance edgar