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

Selenium+Pyquery爬取宾大专业列表仅返回Loading如何解决

问题描述

我尝试运行如下代码爬取目标站点,但仅获取到加载提示内容

我编写的实现代码如下:

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 20) 
driver.get("https://www.college.upenn.edu/majors-list")
#print(driver.title)
td5 = pq(driver.page_source)

代码运行后输出内容如下:

Penn List of College Majors\nLoading...  List of College Majors\nLoading... List of College Majors\nLoading... 

我的需求是获取该页面的学院专业完整列表,目前已尝试Pyquery和Selenium两种实现方案均未成功,恳请协助排查解决。

我需要获取的目标信息参考截图

问题根因

代码中虽然初始化了20秒时长的显式等待对象,但没有绑定任何等待判定规则,driver.get()发起请求后立刻读取页面源码,此时页面的专业列表数据还在异步拉取中,前端仅展示Loading...加载占位符,因此无法获取到完整的专业列表内容。

可行解决方案

方案1:修正Selenium等待逻辑,等内容渲染完成后再解析

添加显式等待判定规则,等专业列表的条目元素加载到DOM树之后再读取页面源码做解析,修正后可正常拿到数据:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from pyquery import PyQuery as pq

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 20)
driver.get("https://www.college.upenn.edu/majors-list")
# 等待专业列表条目加载完成
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".view-majors-list li")))
doc = pq(driver.page_source)
# 提取所有专业名称
major_list = [item.text().strip() for item in doc(".view-majors-list li a").items()]
driver.quit()
print(major_list)

方案2:直接请求数据接口(无需渲染页面,效率更高)

通过浏览器开发者工具抓包可以发现,页面加载时会通过异步接口拉取专业列表的结构化数据,直接请求该接口可以跳过页面渲染步骤,爬取效率更高:

import requests
from pyquery import PyQuery as pq

api_url = "https://www.college.upenn.edu/views/ajax?view_name=majors&view_display_id=page_1"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
    "Referer": "https://www.college.upenn.edu/majors-list"
}
resp = requests.get(api_url, headers=headers)
data = resp.json()
# 从返回的HTML片段中解析专业列表
doc = pq(data[-1]["data"])
major_list = [item.text().strip() for item in doc("li a").items()]
print(major_list)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:33:30