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
相关产品推荐
相关产品推荐

