beautifulsoup - 如何 Web 抓取 SEC Edgar 10-K 动态数据
问题描述
我们正在尝试使用 Python 解析 SEC Edgar 文件。我正在尝试在第 21 行获取此表“按业务部门划分的销售额”。这是文档的链接。
https://www.sec.gov/ix?doc=/Archives/edgar/data/200406/000020040621000057/jnj-20210704.htm
下面是我们在网上找到的代码。网页中的所有数据都在这个标签下。
<div id="dynamic-xbrl-form" class="position-relative">
我们无法打印此数据。
from bs4 import BeautifulSoup
import requests
import sys
# Access page
cik = '200406'
type = '10-K'
dateb = '20210704'
# Obtain HTML for search page
base_url = "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK={}&type={}&dateb={}"
edgar_resp = requests.get(base_url.format(cik, type, dateb))
edgar_str = edgar_resp.text
# Find the document link
doc_link = ''
soup = BeautifulSoup(edgar_str, 'html.parser')
print(soup)
任何人都可以帮助我们得到这个。任何建议都是有帮助的。
解决方案
首先
您需要以正确的方式使用 f 字符串,阅读这篇文章以了解有关 f 字符串的更多信息
正确的代码:
# Obtain HTML for search page
base_url = f"https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK={cik}&type={type}&dateb={dateb}"
edgar_resp = requests.get(base_url)
第二
响应对象返回 403 表示被禁止访问,您可以阅读这篇文章以了解更多关于状态码的信息,要解决此问题,您需要用户代理标头
代码应该是这样的:
from bs4 import BeautifulSoup
import requests
import sys
from fake_useragent import UserAgent
ua = UserAgent()
headers = ua.random
# Access page
cik = '200406'
type = '10-K'
dateb = '20210704'
# Obtain HTML for search page
base_url = f"https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK={cik}&type={type}&dateb={dateb}"
edgar_resp = requests.get(base_url)
print (edgar_resp)
edgar_str = edgar_resp.text
# Find the document link
doc_link = ''
soup = BeautifulSoup(edgar_str, 'html.parser')
# now you can use BeautifulSoup to find you data
#print(soup)
您需要安装 fake-useragent 库
pip install fake-useragent
您可以阅读此主题以了解有关 fake-useragent 的更多信息
之后,您可以使用 beutifulsoup 提取您需要的数据,您可以阅读这篇文章以了解更多信息。
推荐阅读
- javascript - 我如何编写一个函数来从数组中随机选择一个名称而不选择最后一个元素
- excel - EXCEL VBA/SELEIUM“单击按钮”<>找不到元素错误
- flutter - 带有 socket.io-client 的 Flutter 应用程序在发出时冻结
- jhipster - “--skip-client”实体参数是否可以仅应用于某些实体?
- python - 如何将 HTML canvas img 发送和读取到 python api?
- python - GIF 只显示第一帧 - PIL
- jenkins - 如何在声明性 Jenkins 文件中的 Jenkins 多管道中设置反应选择参数
- python-3.x - 在 Mint (Ubuntu) Linux 上恢复 Python3 安装 -- 导入 json
- node.js - cron 任务未运行
- c# - C# 用列表重复列表并合并列表