Python webscraping使用bs4无法抓取SEC财报页面全部标签的问题
问题原因
你当前请求的是SEC的交互式iXBRL预览页面,页面内的表格数据由前端JavaScript动态渲染生成,直接通过HTTP请求获取到的仅为页面初始骨架代码,不存在已经渲染完成的表格DOM元素,所以BeautifulSoup无法检索到对应的td标签内容。
解决方法
将你使用的URL中的ix?doc=/前缀删除,得到的就是原始静态申报文档地址,该文档所有表格内容都存储在静态HTML中,无需前端渲染即可直接解析。
修正后代码示例
from bs4 import BeautifulSoup from urllib.request import Request, urlopen # 请将原URL中ix?doc=/前缀删除后填入此处 url = "替换为处理后的静态文档地址" req = Request(url, headers={'User-Agent': 'Mozilla/5.0'}) read_data = urlopen(req).read() soup_data = BeautifulSoup(read_data,"lxml") # 定位页面第一张表格 first_table = soup_data.find("table") # 遍历行提取目标字段 for row in first_table.find_all("tr"): tds = row.find_all("td") if not tds: continue row_title = tds[0].get_text(strip=True) # 匹配你需要的字段 if row_title in ["Products", "Services", "Cost of sales"]: print(row_title, [td.get_text(strip=True) for td in tds[1:]])
补充说明
如果需要提取表1的全部数据,直接遍历first_table下的所有tr标签即可输出完整表格内容。如果需要更便捷的结构化处理,也可以使用pandas的read_html方法直接将表格转换为DataFrame格式。
内容的提问来源于stack exchange,提问作者Argo
相关产品推荐
相关产品推荐

