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

求助:使用BeautifulSoup爬取AIESEC.org数据返回空列表的解决方法

解决AIESEC.org数据爬取问题

问题根源

目标页面属于动态渲染页面,直接用requests.get()只能获取静态HTML框架,页面的机会列表等核心内容是通过JavaScript异步加载的,因此BeautifulSoup无法找到目标元素,返回空列表。

可行解决方案

可以通过两种方式获取动态加载的数据:

方式一:使用Selenium模拟浏览器加载

通过模拟浏览器行为,等待页面完全渲染后再抓取源码,适合新手快速上手。

1. 安装依赖

pip install selenium bs4 pandas

需同时下载对应浏览器的驱动(如ChromeDriver),并确保驱动路径配置正确。

2. 爬取代码示例

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from bs4 import BeautifulSoup
import pandas as pd
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 初始化浏览器驱动
service = Service('你的ChromeDriver路径')  # 替换为实际驱动路径
driver = webdriver.Chrome(service=service)

# 访问目标页面
driver.get('https://aiesec.org/search')
# 显式等待,直到机会卡片加载完成(替代固定sleep,更稳定)
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CLASS_NAME, 'opportunity-card'))
)

# 获取渲染后的页面源码
src = driver.page_source
soup = BeautifulSoup(src, 'lxml')

# 提取机会数据(需根据页面实际结构调整选择器)
opportunity_list = []
for card in soup.find_all('div', class_='opportunity-card'):
    title = card.find('h3').text.strip() if card.find('h3') else '无标题'
    location = card.find('span', class_='location').text.strip() if card.find('span', class_='location') else '无地点'
    program_type = card.find('span', class_='program-type').text.strip() if card.find('span', class_='program-type') else '无类型'
    opportunity_list.append({
        '标题': title,
        '地点': location,
        '项目类型': program_type
    })

# 关闭浏览器
driver.quit()

# 导出到电子表格
df = pd.DataFrame(opportunity_list)
df.to_excel('aiesec_机会数据.xlsx', index=False)
print('数据已成功导出到aiesec_机会数据.xlsx')

方式二:抓包获取API接口

通过浏览器开发者工具(F12)的「网络」面板,筛选XHR/Fetch请求,找到加载机会数据的API接口,直接请求接口获取JSON格式数据,效率更高,无需模拟浏览器。

操作提示

  1. 打开目标页面后,打开浏览器开发者工具
  2. 切换到「网络」标签,刷新页面
  3. 查找包含机会数据的请求(通常URL包含api、opportunity等关键词)
  4. 复制请求URL和请求头,用requests直接请求,解析返回的JSON数据

注意事项

  • 页面结构可能随时更新,需通过浏览器开发者工具实时核对元素选择器
  • 控制请求频率,避免触发网站反爬机制
  • 若使用API接口,需注意请求参数的合法性,不要随意篡改参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:37:15