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
相关产品推荐
相关产品推荐

