Python Selenium循环爬取Google链接仅返回第一页,如何修复获取4页数据?
存在的问题
- 核心逻辑错误:链接采集代码完全放在分页循环外部,仅在所有翻页操作执行完毕后才采集1次链接,只能拿到最终停留页面的结果
- 缺少页面加载等待:点击页码后未等待页面渲染完成就执行后续操作,大概率出现翻页未生效、元素定位失败的问题,这也是你仅能拿到第一页链接的常见诱因
- 未规避陈旧元素异常:每次翻页后页面DOM会重新渲染,之前查找的页码元素列表会直接失效,循环到第二次就会抛出元素失效的报错
- 分页参数存在隐患:如果
counter初始值不为0,会导致循环次数不足4次,无法完整覆盖前4页的采集需求
修复后的可运行代码
import pandas as pd import time # 提前初始化存储链接的列表 links = [] # 直接循环前4页,下标从0到3对应第1到第4页 for i in range(4): # 每次翻页前重新查找页码元素,避免陈旧元素异常 page_no = driver.find_elements_by_xpath("//table[@class='AaVjTc']/tbody/tr/td/a") page_no[i].click() # 等待2秒确保页面加载完成,可根据网络情况调整时长,也可以替换为显式等待 time.sleep(2) # 采集当前页的搜索结果 headings = driver.find_elements_by_xpath('//div[@class = "g"]') for heading in headings: link = heading.find_element_by_css_selector('.yuRUbf>a').get_attribute("href") links.append(link) # 导出结果 df_da=pd.DataFrame() df_da['Link']=links df_da.to_csv('links.csv',encoding='utf-8-sig')
优化建议
- 可以把
time.sleep替换为Selenium的显式等待,指定等待搜索结果列表加载完成再执行采集,运行效率更高 - 如果频繁触发Google人机验证,可以添加请求头、降低翻页频率,或者使用无UA检测的无头浏览器配置
内容的提问来源于stack exchange,提问作者Simon GIS
相关产品推荐
相关产品推荐

