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

能否不使用Selenium,用Requests或Scrapy提取隐藏的大纲下载链接?

不用Selenium提取大纲下载链接的方法

核心思路

这类隐藏的下载链接通常是前端JavaScript动态生成的,点击时触发JS逻辑获取真实链接并跳转。不用Selenium的话,关键是逆向分析页面的JS代码,找到链接生成规则或调用的接口。

具体步骤

1. 抓取页面源码并分析JS逻辑

先用requests获取页面完整源码:

import requests

url = "https://www.simplilearn.com/big-data-and-analytics/python-for-data-science-training"
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"
}
response = requests.get(url, headers=headers)
html = response.text

在源码里搜索和下载大纲相关的关键词,比如syllabus、download、outline,重点找按钮的点击事件绑定代码。比如可能会找到类似片段:

document.querySelector('.syllabus-download-btn').addEventListener('click', function() {
    const courseId = 'PY0123';
    const realUrl = `https://www.simplilearn.com/assets/syllabi/${courseId}.pdf`;
    window.open(realUrl, '_blank');
});

2. 提取页面内的核心标识

多数教育网站的下载链接依赖课程/产品ID,这个ID通常会藏在页面源码的这些位置:

  • Meta标签:<meta name="course-id" content="PY0123">
  • 隐藏输入框:<input type="hidden" id="courseId" value="PY0123">
  • JS全局变量:window.courseInfo = {id: 'PY0123'}

用正则表达式提取这个ID:

import re

# 匹配meta标签里的课程ID
course_id = re.search(r'meta name="course-id" content="(.*?)"', html).group(1)
# 或者匹配JS全局变量
course_id = re.search(r'window\.courseInfo.*?id:\s*"(\w+)"', html).group(1)

3. 构造真实下载链接或调用接口

如果链接是直接拼接的,用提取到的ID构造URL即可:

download_url = f"https://www.simplilearn.com/assets/syllabi/{course_id}.pdf"

如果是通过接口获取链接,找到接口地址后用requests请求:

api_url = f"https://www.simplilearn.com/api/courses/{course_id}/syllabus"
api_response = requests.get(api_url, headers=headers)
download_url = api_response.json().get('downloadUrl')

4. 处理反爬限制

如果遇到反爬,需要:

  • 带上完整请求头(包括Referer、Cookie,可以从浏览器复制后填入)
  • 用requests.Session维持会话,模拟浏览器访问流程
  • 添加请求延时,避免频繁触发反爬机制

为什么XPath/CSS定位不到链接?

因为按钮的href属性是#,真实下载链接并不在元素属性里,而是存放在点击事件的JS逻辑中,所以直接定位元素只能拿到空的占位符,无法获取真实链接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:48:17