如何用Python Selenium实现谷歌搜索结果多页面URL爬取?
爬取Google搜索结果多页URL的解决方案
现有代码的问题
你的代码存在几个关键逻辑错误,导致无法正确爬取后续页面:
- 循环逻辑混乱:每次循环里重复执行Google搜索,而非基于当前搜索结果页翻页
- 变量初始化问题:
linkedin_urls在第一次循环时未定义就进行列表推导,会直接报错 - 拼写错误:
driver.get('https://www.gooogle.com')里的域名多了一个o,应该是google.com - 翻页时机错误:翻页操作的位置不对,没有在获取完当前页URL后执行
修正后的实现方案
核心思路是:先完成第一次搜索,然后在循环中依次获取当前页的目标URL,再点击"Next"翻页,直到达到指定页数或没有下一页为止。同时用显式等待替代固定sleep,提升稳定性和效率。
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time # 初始化浏览器驱动 driver = webdriver.Chrome() wait = WebDriverWait(driver, 10) # 执行初始搜索 driver.get('https://www.google.com') search_query = wait.until(EC.presence_of_element_located((By.NAME, 'q'))) search_query.send_keys('inurl:https://www.ama-assn.org/system/files') search_query.send_keys(Keys.RETURN) # 设置要爬取的页数(这里示例爬8页,对应原代码的range(0,7)) total_pages = 7 for page_num in range(total_pages): # 等待搜索结果加载完成,定位所有结果链接 search_results = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'div.g a'))) # 提取并打印目标URL(过滤掉Google自身的跳转链接,只保留实际结果URL) for result in search_results: url = result.get_attribute('href') # 过滤Google的中转链接,只保留包含目标域名的URL if 'ama-assn.org/system/files' in url: print(url) # 尝试点击下一页,如果没有下一页则退出循环 try: next_button = wait.until(EC.element_to_be_clickable((By.LINK_TEXT, 'Next'))) next_button.click() time.sleep(1) # 给页面加载留短暂时间 except: print("已无更多页面,停止爬取") break # 关闭浏览器 driver.quit()
关键优化说明
- 使用显式等待:替代固定
sleep,确保元素加载完成后再操作,避免因网络延迟导致的定位失败 - 过滤URL:Google搜索结果的链接会有中转跳转,通过判断目标域名来提取有效URL
- 异常处理:捕获翻页失败的情况,避免程序直接崩溃
- 简化逻辑:去掉重复搜索的冗余操作,基于初始搜索结果直接翻页
内容的提问来源于stack exchange,提问作者maqsood
相关产品推荐
相关产品推荐

