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

构造含Ajax的URL爬取iframe表格遇阻,寻求非Selenium解决方案

解决动态加载表格提取问题(无需Selenium)

看起来你遇到了动态加载表格的典型坑——直接构造URL要么拿不到内容,要么拿到乱码/缺失的内容,我来给你几个不用Selenium的实用解决方案:

1. 补全AJAX请求的完整上下文(请求头+参数)

很多网站会校验请求的合法性,直接用构造的URL请求时,因为缺少浏览器环境的关键请求头,后端可能返回空或者错误内容。你需要:

  • 打开Chrome开发者工具的Network面板,重新点击cns_Tab21标签触发表格加载
  • 找到对应的AJAX请求(通常是XHR类型),复制它的请求头(比如User-Agent、Referer、Cookie)和完整的请求参数(包括URL里的查询字符串,甚至可能有POST表单数据)

用requests模拟请求时带上这些头,示例代码:

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/118.0.0.0 Safari/537.36',
    'Referer': 'http://bitly.kr/sBKDIK',
    'Cookie': 'your_session_cookie_here'
}

# 替换成你找到的实际AJAX请求URL
target_url = 'your_ajax_request_url_with_params'

response = requests.get(target_url, headers=headers)

2. 检查AJAX响应的类型

带ajax参数的URL返回空,很大概率是因为它返回的不是HTML表格,而是JSON数据(前端拿到后再渲染成表格)。你可以:

  • 在开发者工具里查看该AJAX请求的响应内容,如果是JSON格式,直接解析JSON提取数据即可,不需要用BeautifulSoup处理HTML:
# 如果响应是JSON格式
if 'application/json' in response.headers.get('Content-Type', ''):
    table_data = response.json()
    # 根据JSON结构提取数据,比如遍历rows字段
    for row in table_data.get('rows', []):
        print(row)

3. 修复错乱内容的问题

删除ajax参数后内容错乱,大概率是因为:

  • 后端返回的是HTML片段而非完整页面,需要设置正确的编码解析:
    # 先设置正确的编码,比如gbk或utf-8,根据页面实际编码调整
    response.encoding = 'utf-8'
    soup = BeautifulSoup(response.text, 'html.parser')
    target_table = soup.find('table')
    if target_table:
        print(target_table.prettify())
    
  • 或者该URL返回的是其他标签的内容,需要根据cns_Tab21对应的标识,通过id或class筛选出正确的表格容器

小提示

  • 如果网站有反爬机制,可能需要添加Cookie(从浏览器当前会话复制),确保请求和浏览器访问的状态一致
  • 不要忽略Referer头,很多网站会校验请求来源是否合法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:33:21