You need to enable JavaScript to run this app. BeautifulSoup使用find_all(text=True)无输出?爬取NYSE接口无法提取td文本
优惠活动
大模型
产品
解决方案
定价
更多

BeautifulSoup使用find_all(text=True)无输出?爬取NYSE接口无法提取td文本

排查修复方案

无输出的核心原因

你请求的https://www.nyse.com/api/quotes/filter是纯JSON结构化数据接口,返回内容里没有任何HTML标签结构,自然不存在<td>节点。BeautifulSoup解析这类纯文本JSON内容时,执行查找td的逻辑只会返回空列表,循环体根本不会进入,也不会抛出任何错误。
可以先执行print(page.text)查看实际响应内容,就能看到返回全是结构化的字段数据,完全没有HTML页面的标签结构。

附带的易踩坑点

  • 该接口有基础的请求校验,仅发送裸POST请求、不带合法请求头时,会被接口拦截,返回空响应或错误提示JSON,就算调整解析逻辑也拿不到有效数据
  • 如果后续爬取普通网页的表格,还会碰到一类空结果:页面里的<td>是前端JS动态渲染插入的,requests拿到的初始HTML源码里本来就没有这些标签,硬找也只会返回空列表

修复后可直接运行的参考代码

from bs4 import BeautifulSoup
import requests
import json

# 补全浏览器请求头,绕过接口基础校验
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
    "Accept": "application/json"
}

for page_no in range(1, 3):
    data = {
        'filterToken': "",
        'instrumentType': "EQUITY",
        'maxResultsPerPage': 10,
        'pageNumber': page_no
    }
    page = requests.post('https://www.nyse.com/api/quotes/filter', data=data, headers=headers)
    # JSON接口直接解析为字典即可,无需套BeautifulSoup查找HTML标签
    res_list = json.loads(page.text)
    print('PAGE', page_no)
    for item in res_list:
        # 按需要提取对应字段,比如股票代码、证券名称
        print(item.get('symbolTicker'), item.get('instrumentName'))

若后续仍需要提取td文本的调整技巧

  • 把旧版写法soup.findAll('td')替换为兼容新版BeautifulSoup的soup.find_all('td'),避免版本适配问题
  • 提取文本时直接用td.get_text(strip=True)即可,不需要手动拼接所有文本节点,代码更简洁也不会出现空格、换行符混杂的问题

内容的提问来源于stack exchange,提问作者anuar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.03 20:36:03