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

Python使用BeautifulSoup爬取课程网页无法提取全部URL如何解决

问题产生原因
  • 反爬机制拦截:UBC的课程查询系统会校验请求的User-Agent标识,你直接用requests默认的请求头发送请求时,服务器会识别到请求来自爬虫程序,不会返回完整的学科列表页面内容,导致解析时找不到对应链接。
  • 提取范围不精准:你当前代码直接匹配页面内所有<a>标签,哪怕后续拿到完整页面,也会提取到大量无关的导航、页脚链接,没办法直接得到你需要的学科代码关联链接。
修复方案

首先给请求添加模拟普通浏览器的请求头,绕过基础的反爬校验,再精准定位学科列表所在的表格区域提取链接,同时可以拼接域名把相对路径转为可直接访问的绝对路径。
修复后的代码如下:

from bs4 import BeautifulSoup
import requests

# 配置请求头,模拟Chrome浏览器访问
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"
}
url = "https://courses.students.ubc.ca/cs/courseschedule?pname=subjarea&tname=subj-all-departments"
# 发送请求时带入headers
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.text, features="lxml")

# 精准定位学科列表表格,只提取表格内的学科代码链接
subject_table = soup.find("table", id="mainTable")
if subject_table:
    for row in subject_table.find("tbody").find_all("tr"):
        subject_link = row.find("td").find("a")
        if subject_link:
            # 拼接域名得到完整链接
            full_url = "https://courses.students.ubc.ca" + subject_link.get("href")
            print(full_url)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:15:04