如何用Python读取网站HTML内容?爬取纳斯达克表格无结果怎么办
问题根因
- 纳斯达克官网配置了基础反爬策略,
pandas.read_html()默认发起的请求未携带浏览器标识等请求头,会被服务器直接拒绝,返回的响应内容不包含任何可解析的表格结构 - 该页面的指数成分股表格属于动态渲染内容,首次请求返回的静态HTML源码中没有完整的表格数据,仅通过静态HTML解析无法获取目标内容
- 原代码存在冗余导入问题,重复导入了两次
requests库,虽不影响运行但属于不规范写法
修复方案
建议先构造合法请求头,调用纳斯达克官方公开的行情接口获取结构化数据,参考代码如下:
import pandas as pd import requests def main(): URL = 'https://api.nasdaq.com/api/quote/list-type/nasdaq100' # 构造模拟浏览器的请求头,绕过基础反爬 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', 'Accept': 'application/json, text/plain, */*' } resp = requests.get(URL, headers=headers) # 解析返回的JSON数据,提取成分股表格内容 data = resp.json()['data']['data']['rows'] df = pd.DataFrame(data) print(df) if __name__ == "__main__": main()
- 上述代码直接调用页面后端用来加载表格数据的接口,返回的JSON格式数据无需解析HTML,处理效率更高
- 接口返回的字段包含股票代码、公司名称、最新价、涨跌幅等全部表格展示字段,可直接按需筛选使用
- 请求头中的
User-Agent可根据自己的浏览器版本替换,避免被集中拦截
内容的提问来源于stack exchange,提问作者Davide Serafini
相关产品推荐
相关产品推荐

