Python新手如何抓取点击非链接弹窗后才显示的网页数据?
爬虫实现方案
下面是两种适配不同需求的可落地实现路径,零基础可以优先从第一种开始尝试:
方案1:Selenium模拟浏览器操作(零接口分析门槛)
这个方案完全模拟人工点击的操作逻辑,不需要拆解网站的前端加密和后端接口逻辑,上手最快:
- 先安装依赖,直接执行命令:
pip install selenium webdriver-manager - 核心实现逻辑如下,你只需要替换对应元素的选择器即可运行:
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 webdriver_manager.chrome import ChromeDriverManager import time # 自动适配Chrome驱动,无需手动下载配置 driver = webdriver.Chrome(ChromeDriverManager().install()) # 打开目标教授名录页面 driver.get("替换为你的目标页面URL") # 定位所有可以触发弹窗的按钮,替换为网站对应按钮的CSS选择器 trigger_btns = driver.find_elements(By.CSS_SELECTOR, ".popup-trigger-btn") for btn in trigger_btns: # 滚动到按钮可见位置,避免被遮挡无法点击 driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", btn) time.sleep(0.5) btn.click() # 等待弹窗加载完成,最多等待10秒,替换为弹窗容器的CSS选择器 popup = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, ".detail-popup")) ) # 提取目标字段,替换为对应内容的CSS选择器 email = popup.find_element(By.CSS_SELECTOR, ".email-field").text.strip() department = popup.find_element(By.CSS_SELECTOR, ".dept-field").text.strip() # 可自行添加存储逻辑,比如写入CSV或者Excel print(f"邮箱:{email},院系:{department}") # 关闭弹窗,替换为弹窗关闭按钮的CSS选择器 popup.find_element(By.CSS_SELECTOR, ".close-btn").click() time.sleep(1) driver.quit()
- 选择器获取方式:Chrome浏览器右键对应元素 → 点击「检查」 → 在弹出的开发者工具元素面板右键对应标签 → 复制 → 复制CSS选择器,直接粘贴替换即可。
方案2:直接请求后端接口(爬取效率更高)
如果需要爬取的教授数量较大,Selenium逐一点击效率较低,可以尝试直接抓取弹窗对应的后端接口:
- 操作步骤:
- 打开Chrome开发者工具,切换到「网络」标签,筛选栏选择「Fetch/XHR」
- 手动点击一次弹窗,观察网络请求列表里新增的请求,一般返回格式为JSON的请求即为数据接口,响应内容里会包含邮箱、院系等字段
- 复制该接口的URL、请求头、请求参数,用
requests库循环构造请求即可,爬取速度比Selenium快5-10倍
- 注意:如果接口有加密参数(如token、sign等)且无法快速拆解生成规则,直接使用方案1即可,不需要浪费时间调试。
通用注意事项
- 可以适当增加操作间隔,避免请求频率过高触发网站反爬机制
- 如果网站有登录要求,可以先在Selenium启动的浏览器里手动完成登录,再执行爬取逻辑
内容的提问来源于stack exchange,提问作者Michelle Seo
相关产品推荐
相关产品推荐

