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

Google Scholar多页结果爬取重复问题求助(非SerpAPI方案)

Google Scholar多页爬取重复第一页数据的解决方案

以下是几个无需依赖SerpAPI的可行方案,针对你遇到的修改start参数仍返回第一页的问题:

  • 强制刷新+等待元素加载
    浏览器可能缓存页面导致新URL加载后仍显示旧内容,切换页码后需强制刷新并等待搜索结果元素完全加载,确保获取最新页面源码:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    # 循环爬取多页(示例爬取前5页)
    for page_num in range(0, 50, 10):
        target_url = f"https://scholar.google.com/scholar?q=your_search_query&start={page_num}"
        driver.get(target_url)
        # 等待搜索结果容器出现,确认页面加载完成
        WebDriverWait(driver, 15).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "div.gs_r.gs_or.gs_scl"))
        )
        # 强制刷新避免缓存
        driver.refresh()
        # 再次等待刷新后的页面加载
        WebDriverWait(driver, 15).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "div.gs_r.gs_or.gs_scl"))
        )
        # 解析当前页
        soup = BeautifulSoup(driver.page_source, "html.parser")
        # 你的解析逻辑...
    
  • 模拟点击下一页按钮
    直接操作页面的"下一页"按钮更贴近用户真实行为,比修改URL更可靠,避免参数失效问题:

    while True:
        # 解析当前页数据
        soup = BeautifulSoup(driver.page_source, "html.parser")
        # 处理结果逻辑...
    
        # 定位并点击下一页按钮
        try:
            # 等待按钮可点击
            next_btn = WebDriverWait(driver, 10).until(
                EC.element_to_be_clickable((By.CSS_SELECTOR, "button.gs_btnPR.gs_in_ib.gs_btn_half.gs_btn_lsb.gs_btn_srt"))
            )
            next_btn.click()
            # 等待页面切换(旧结果元素失效)
            WebDriverWait(driver, 10).until(
                EC.staleness_of(driver.find_element(By.CSS_SELECTOR, "div.gs_r.gs_or.gs_scl"))
            )
        except:
            # 无下一页时退出循环
            break
    

    注:若页面上下一页是<a>标签,可替换选择器为By.LINK_TEXT, "下一页"或对应CSS选择器。

  • 重置会话或使用隐私模式
    长时间会话可能导致Google Scholar的参数验证异常,可通过重置Cookie或使用隐私模式规避:

    # 方式1:每次切换页码前重置Cookie
    driver.delete_all_cookies()
    driver.get(target_url)
    
    # 方式2:启动隐私模式浏览器
    from selenium.webdriver.chrome.options import Options
    opts = Options()
    opts.add_argument("--incognito")
    driver = webdriver.Chrome(options=opts)
    
  • 检查解析逻辑是否复用旧源码
    确保每次切换页码后都重新获取driver.page_source生成新的BeautifulSoup对象,不要复用之前的soup实例:
    ❌错误:提前生成soup后循环解析(始终用第一页源码)
    ✅正确:每次页面加载完成后重新生成soup

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:00:58