智能嗅探AJAX触发:机器学习在动态渲染中的创新应用

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 随着Web技术发展,动态加载数据的网站(如今日头条)对传统爬虫提出新挑战:初始HTML无完整数据、请求路径动态生成且易触发反爬策略。本文以爬取“AI”相关新闻为例,探讨了通过浏览器自动化、抓包分析和静态逆向接口等方法采集数据的局限性,并提出借助机器学习智能识别AJAX触发点的解决方案。通过特征提取与模型训练,爬虫可自动推测数据接口路径并高效采集。代码实现展示了如何模拟AJAX请求获取新闻标题、简介、作者和时间,并分类存储。未来,智能化将成为采集技术的发展趋势。

一、问题描述:数据加载变“隐形”,采集举步维艰

随着Web技术不断发展,越来越多网站采用了AJAX、动态渲染等技术来加载数据。以今日头条(https://www.toutiao.com) 为例,用户打开网页时并不会一次性加载所有信息,而是通过JavaScript触发异步请求分批加载新闻数据。

对于传统爬虫,这种动态加载的数据变得“隐形”:

  • 页面初始HTML并无完整数据
  • 请求路径是JavaScript动态拼接
  • 请求频率稍高就触发反爬策略

于是,如何精准嗅探出这些AJAX请求路径、参数及触发方式,成了采集中的新难题。


二、场景再现:爬取关键词“AI”的头条新闻

设定任务:从 https://www.toutiao.com 中搜索关键词“AI”,采集相关新闻的标题、简介、作者和发布时间。初看HTML源代码,会发现结构复杂、数据嵌入 JavaScript 中,无法直接提取。

我们尝试用传统 BeautifulSoup + requests 抓取,发现返回结果中并无新闻数据,失败告终。


三、多种尝试:模拟浏览器?分析XHR?依旧低效

面对这种问题,我们尝试以下三种方法:

  1. 浏览器自动化(如Selenium):虽然可以加载全部页面内容,但执行效率低,无法大规模采集。
  2. 抓包分析(Chrome DevTools):定位XHR请求路径并手动拼接参数,但路径容易改变、无法适应动态规则。
  3. 静态逆向接口:部分API参数存在签名校验或时间戳校验,逆向成本高。

因此,我们需要一种更智能的方式让爬虫“学会”识别页面中的AJAX行为并自动推测请求方式


四、解决方法:引入机器学习,智能识别AJAX触发点

借助机器学习+页面行为特征提取,我们构建了一个智能嗅探器,流程如下:

  1. 输入关键词构造URL,加载HTML页面
  2. 用正则+特征匹配分析页面中潜在的AJAX触发入口
  3. 基于训练集模型识别出真实数据接口路径
  4. 构造Headers,使用爬虫代理请求真实数据
  5. 解析JSON结构,抽取标题、简介、作者和时间并分类存储

以下是核心代码实现部分:


五、核心代码

import requests
import json
import time
import random
from urllib.parse import quote

# 爬虫代理IP配置(以亿牛云代理为例 www.16yun.cn)
proxy_host = "proxy.16yun.cn"   #your-proxy-domain
proxy_port = "31000"   #your-port
proxy_user = "16YUN"   #your-username
proxy_pass = "16IP"    #your-password

# 构造代理格式
proxies = {
   
    "http": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}",
    "https": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}"
}

# 设置User-Agent和cookie,模拟真实用户访问
headers = {
   
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
    "cookie": "tt_webid=1234567890abcdef; other_cookies=xxx"
}

# 关键词搜索
keyword = "AI"
encoded_keyword = quote(keyword)

# 模拟 AJAX 请求接口(来自浏览器F12提取的接口,带关键词参数)
def fetch_news(keyword):
    url = f"https://www.toutiao.com/api/search/content/?aid=24&app_name=web_search&offset=0&format=json&keyword={encoded_keyword}&autoload=true&count=20&en_qc=1&cur_tab=1&from=search_tab"

    try:
        response = requests.get(url, headers=headers, proxies=proxies, timeout=10)
        data = response.json()
        result = []

        for item in data.get("data", []):
            if not item.get("title"):
                continue
            news = {
   
                "标题": item.get("title", ""),
                "简介": item.get("abstract", ""),
                "作者": item.get("media_name", "未知"),
                "时间": item.get("datetime", "未知")
            }
            result.append(news)

        return result
    except Exception as e:
        print(f"抓取出错:{e}")
        return []

# 分类存储(按作者存为独立文件)
def save_by_author(news_list):
    from collections import defaultdict
    import os

    grouped = defaultdict(list)
    for news in news_list:
        grouped[news["作者"]].append(news)

    if not os.path.exists("output"):
        os.mkdir("output")

    for author, items in grouped.items():
        filename = f"output/{author}.json"
        with open(filename, "w", encoding="utf-8") as f:
            json.dump(items, f, ensure_ascii=False, indent=2)

if __name__ == "__main__":
    news_data = fetch_news(keyword)
    print(f"共抓取到 {len(news_data)} 条资讯")
    save_by_author(news_data)
AI 代码解读

六、原理分析:从规则硬编码 → 学习预测接口结构

这类动态接口的一个关键特征是:参数格式、接口路径在用户行为驱动下形成。因此,通过对已知接口路径(如 /api/search/content)进行归纳、训练,可以构建轻量型预测器(如基于TF-IDF+随机森林分类器),识别新页面中是否存在可用AJAX接口。

当然,本文采用了简化版“人工辅助+规则模板”识别方式。在实际大型项目中,可以扩展为:

  • 使用 Puppeteer/Playwright 获取完整DOM+XHR调用记录
  • 使用 LLM 模型预测数据加载源
  • 构建接口路径聚类系统,自动适应接口变更

七、结语:未来已来,采集正逐步“智能化”

面对复杂的前端动态渲染,靠写死的路径早已无法应对日益频繁的页面结构变动。通过引入机器学习和行为识别,我们能让爬虫具备“嗅觉”和“判断力”,甚至主动适应页面的变化。

目录
打赏
0
1
1
0
216
分享
相关文章
云上玩转Qwen3系列之三:PAI-LangStudio x Hologres构建ChatBI数据分析Agent应用
PAI-LangStudio 和 Qwen3 构建基于 MCP 协议的 Hologres ChatBI 智能 Agent 应用,通过将 Agent、MCP Server 等技术和阿里最新的推理模型 Qwen3 编排在一个应用流中,为大模型提供了 MCP+OLAP 的智能数据分析能力,使用自然语言即可实现 OLAP 数据分析的查询效果,减少了幻觉。开发者可以基于该模板进行灵活扩展和二次开发,以满足特定场景的需求。
动态渲染页面智能嗅探:机器学习判定AJAX加载触发条件
本文介绍了一种基于机器学习的智能嗅探系统,用于自动判定动态渲染页面中AJAX加载的最佳触发时机。系统由请求分析、机器学习判定、数据采集和文件存储四大模块构成,采用爬虫代理技术实现高效IP切换,并通过模拟真实浏览器访问抓取微博热搜及评论数据。核心代码示例展示了如何调用微博接口获取榜单与评论,并利用预训练模型预测AJAX触发条件,最终将结果以JSON或CSV格式存储。该方案提升了动态页面加载效率,为信息采集与热点传播提供了技术支持。
76 15
动态渲染页面智能嗅探:机器学习判定AJAX加载触发条件
大数据与机器学习:数据驱动的智能时代
本文探讨了大数据与机器学习在数字化时代的融合及其深远影响。大数据作为“新时代的石油”,以其4V特性(体量、多样性、速度、真实性)为机器学习提供燃料,而机器学习通过监督、无监督、强化和深度学习等技术实现数据价值挖掘。两者协同效应显著,推动医疗、金融、零售、制造等行业创新。同时,文章分析了数据隐私、算法偏见、可解释性及能耗等挑战,并展望了边缘计算、联邦学习、AutoML等未来趋势。结语强调技术伦理与实际价值并重,倡导持续学习以把握智能时代机遇。
122 13
云上玩转Qwen3系列之二:PAI-LangStudio搭建联网搜索和RAG增强问答应用
本文详细介绍了如何使用 PAI-LangStudio 和 Qwen3 构建基于 RAG 和联网搜索 的 AI 智能问答应用。该应用通过将 RAG、web search 等技术和阿里最新的推理模型 Qwen3 编排在一个应用流中,为大模型提供了额外的联网搜索和特定领域知识库检索的能力,提升了智能回答的效果,减少了幻觉。开发者可以基于该模板进行灵活扩展和二次开发,以满足特定场景的需求。
20分钟掌握机器学习算法指南
在短短20分钟内,从零开始理解主流机器学习算法的工作原理,掌握算法选择策略,并建立对神经网络的直观认识。本文用通俗易懂的语言和生动的比喻,帮助你告别算法选择的困惑,轻松踏入AI的大门。
170 8
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
500 6
【重磅发布】AllData数据中台核心功能:机器学习算法平台
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
AI训练师入行指南(三):机器学习算法和模型架构选择
从淘金到雕琢,将原始数据炼成智能珠宝!本文带您走进数字珠宝工坊,用算法工具打磨数据金砂。从基础的经典算法到精密的深度学习模型,结合电商、医疗、金融等场景实战,手把手教您选择合适工具,打造价值连城的智能应用。掌握AutoML改装套件与模型蒸馏术,让复杂问题迎刃而解。握紧算法刻刀,为数字世界雕刻文明!
158 6
基于机器学习的人脸识别算法matlab仿真,对比GRNN,PNN,DNN以及BP四种网络
本项目展示了人脸识别算法的运行效果(无水印),基于MATLAB2022A开发。核心程序包含详细中文注释及操作视频。理论部分介绍了广义回归神经网络(GRNN)、概率神经网络(PNN)、深度神经网络(DNN)和反向传播(BP)神经网络在人脸识别中的应用,涵盖各算法的结构特点与性能比较。
机器学习算法的优化与改进:提升模型性能的策略与方法
机器学习算法的优化与改进:提升模型性能的策略与方法
1044 13
机器学习算法的优化与改进:提升模型性能的策略与方法
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等