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

如何用Python抓取HTML表格指定行数数据(模拟IMPORTHTML)

问题解决:Python模拟Google Sheets IMPORTHTML抓取冲浪数据

原代码问题分析

  1. CSS选择器错误:多个类名选择时,类名之间需要用.连接,原代码用空格会被解析为后代选择器,无法定位到目标表格。
  2. 未指定HTML解析器:BeautifulSoup(html)未指定解析器,可能导致解析异常。
  3. 缺少请求头:直接用requests.get可能被网站反爬机制拦截,返回空内容。

修正后的代码

import requests
from bs4 import BeautifulSoup

# 添加请求头模拟浏览器访问
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"
}

url = "https://magicseaweed.com/Belmar-Surf-Report/3683/"
response = requests.get(url, headers=headers)
response.raise_for_status()  # 捕获请求错误

# 指定html.parser解析器
soup = BeautifulSoup(response.text, features="html.parser")

# 修正CSS选择器:类名用.连接
table = soup.select_one("table.table-primary.table-forecast.allSwellsActive.msw-js-table")

if table:
    # 获取前8行数据
    for row in table.find_all("tr")[:8]:
        # 提取每个td的文本内容,过滤空字符
        row_data = [td.get_text(strip=True) for td in row.find_all("td")]
        print(row_data)
else:
    print("未找到目标表格")

关键修复点

  • CSS选择器修正:将table table-primary...改为table.table-primary...,定位同时包含这些类的表格元素。
  • 添加请求头:模拟浏览器UA,避免被反爬拦截。
  • 指定解析器:明确使用html.parser,提升解析稳定性。
  • 错误处理:增加response.raise_for_status()捕获请求异常,避免空内容导致后续报错。
  • 文本提取:将td对象转换为实际文本内容,方便后续处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:25:23