使用BeautifulSoup爬取谷歌搜索结果时Title与链接无法正常输出问题
谷歌爬虫问题排查及修复方案
问题根因定位
- 裸
except全局吞错:当前的异常捕获逻辑会吃掉所有运行时错误,无法定位具体故障点,代码执行中途报错后直接进入下一轮循环,导致links和titles的赋值逻辑根本没有执行 - 变量名不统一:初始化的描述存储列表是
descriptions = [],但实际赋值时用的是description_text.append(),这一步会直接抛出NameError,触发异常跳过后续代码,是最核心的故障原因 - 协议不规范:使用http开头的谷歌搜索地址会触发重定向,容易出现页面加载不完整的问题
- 无加载等待:
driver.get(url)执行后没有等待页面渲染完成就直接解析源码,可能出现元素未加载的问题 - 类名动态性:谷歌会根据客户端、登录状态、UA返回不同的页面结构,本地浏览器看到的类名和selenium拿到的页面类名可能不一致
修复步骤
- 把异常捕获改成带报错打印的逻辑,先明确错误类型
- 统一描述列表的变量名
- 把搜索地址改成https协议
- 增加页面加载等待逻辑
- 打印当前拿到的页面源码确认类名是否匹配
修正后可运行代码
from bs4 import BeautifulSoup import time # 此处需提前正确初始化driver,示例初始化逻辑: # from selenium import webdriver # driver = webdriver.Chrome() query = input("Enter your value: ") print("Search Term:" + query) links = [] # 存储最终结果链接 titles = [] # 存储标题 description_text = [] # 存储描述,和后续赋值的变量名保持统一 n_pages = 6 for page in range(1, n_pages): # 改成https协议避免重定向问题 url = "https://www.google.com/search?q=" + query + "&start=" + str((page - 1) * 10) print("当前爬取页面:" + url) driver.get(url) # 增加2秒等待,确保页面元素加载完成 time.sleep(2) soup = BeautifulSoup(driver.page_source, 'html.parser') # 临时打印确认yuRUbf类是否存在,调试正常后可删除 # print("页面是否包含yuRUbf类:", "yuRUbf" in soup.prettify()) try: search = soup.find_all('div', class_ = "yuRUbf") for link in search: links.append(link.a['href']) description = soup.find_all('div', class_ = "VwiC3b yXK7lf MUxGbd yDYNvb lyLwlc lEBKkf") for d in description: description_text.append(d.span.text) title = soup.find_all('div', class_ = "yuRUbf") for t in title: titles.append(t.h3.text) # 打印异常信息,避免无差别吞错 except Exception as e: print(f"第{page}页爬取报错:", e) continue print("链接列表:", links) print("链接数量:", len(links)) print("描述列表:", description_text) print("描述数量:", len(description_text)) print("标题列表:", titles) print("标题数量:", len(titles)) # 爬取完成后关闭driver driver.quit()
内容的提问来源于stack exchange,提问作者Raspberry Lemon
相关产品推荐
相关产品推荐

