You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用requests_html爬取Forbes最佳商业州榜单,无法获取表格内容怎么办?

解决Forbes最佳商业州榜单爬取问题

你的代码返回-1是因为错误地在页面纯文本中查找HTML元素ID字符串,#list-table-body是DOM元素的ID属性,不会以纯文本形式出现在页面文本里,自然找不到。正确做法是用requests_html的DOM选择器定位元素,而非操作原始文本。

修正后的代码示例

import requests_html

# 初始化会话
session = requests_html.HTMLSession()

# 添加请求头模拟浏览器(可选,降低反爬拦截概率)
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}

# 请求目标页面
r = session.get("https://www.forbes.com/best-states-for-business/list/#tab:overall", headers=headers)

# 渲染动态内容,sleep参数确保页面加载完成
r.html.render(sleep=2)

# 定位表格主体元素(first=True取第一个匹配项)
table_body = r.html.find('#list-table-body', first=True)

if table_body:
    # 遍历表格的每一行
    for row in table_body.find('tr'):
        # 提取每行的列文本并去除首尾空白
        cols = [col.text.strip() for col in row.find('td')]
        if cols:  # 跳过空行
            print(cols)
else:
    print("未找到目标表格元素")

关键说明

  • 用r.html.find()替代r.text.find():前者是针对DOM结构的选择器,能直接定位到指定ID的元素;
  • 增加sleep参数:动态页面需要时间加载内容,sleep=2让浏览器渲染完成后再提取数据;
  • 可选请求头:模拟正常浏览器请求,避免被网站反爬机制拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:35:18