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

如何模拟点击按钮获取2023年期刊数据?爬虫技术求助

解决ScienceDirect期刊2023年数据爬取的动态加载问题

你的问题核心在于:静态请求工具(如requests)无法获取JavaScript动态渲染的内容——页面的2023年期刊信息是点击折叠按钮后通过JS异步加载的,仅用requests只能拿到初始页面的HTML,看不到展开后的内容。以下是具体解决方案:


方案:使用Selenium模拟浏览器操作

Selenium可以模拟真实浏览器的行为,执行JS并获取渲染完成的页面内容,步骤如下:

1. 准备依赖

先安装Selenium并下载对应浏览器的驱动(比如ChromeDriver,需和你的Chrome版本匹配):

pip install selenium

2. 完整代码实现

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 bs4 import BeautifulSoup

# 初始化Chrome浏览器(可替换为Firefox等)
driver = webdriver.Chrome()
url = "https://www.sciencedirect.com/journal/journal-of-econometrics/issues"
driver.get(url)

try:
    # 等待2023年折叠按钮加载完成(最多等待10秒)
    target_button = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//button[.//span[contains(text(), '2023')]]"))
    )
    
    # 点击按钮展开2023年内容
    target_button.click()
    
    # 等待展开后的期刊条目加载完成
    WebDriverWait(driver, 5).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "a.js-issue-item-link"))
    )
    
    # 获取渲染完成的页面HTML
    page_source = driver.page_source
    soup = BeautifulSoup(page_source, 'html.parser')
    
    # 提取并筛选2023年的期刊信息
    issue_items = soup.find_all('a', class_="anchor js-issue-item-link text-m anchor-default")
    for item in issue_items:
        # 通过父元素判断所属年份,避免混入2024年内容
        year_text = item.find_parent('div', class_="accordion-panel-content").find_previous_sibling('button').text
        if '2023' in year_text:
            print(f"期刊名称:{item.text.strip()}")
            print(f"链接:https://www.sciencedirect.com{item['href']}")
            print("---")
            
finally:
    # 关闭浏览器
    driver.quit()

关键细节说明

  • 等待元素加载:使用WebDriverWait替代固定延迟,避免因页面加载慢导致的元素找不到问题。
  • 精准定位按钮:通过XPATH直接定位包含"2023"文本的按钮,比单纯依赖class更可靠。
  • 内容加载验证:点击按钮后等待期刊条目出现,确保BeautifulSoup能抓取到动态生成的内容。
  • 反爬兼容:若遇到点击无效,可替换为JS执行点击:driver.execute_script("arguments[0].click();", target_button)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:55:16