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

无法从Google搜索结果完整提取<em>标签及链接文本的技术问题

解决Google搜索结果内容提取的问题:Selenium+BeautifulSoup优化方案

我帮你分析下当前代码的问题,然后给出优化后的方案,解决内容提取不全的问题:


一、提取完整的搜索结果描述文本

问题出在哪?

你现在的流程是用Selenium打开页面,再用requests.get(browser.current_url)去拉取内容,这会导致两个关键问题:

  1. Google的搜索页面会根据会话信息(比如Cookie、浏览器状态)返回不同内容,requests的请求没有带上Selenium里的会话数据,拿到的页面和浏览器渲染出来的完全不一样
  2. 部分搜索结果的描述是动态加载的,静态HTML里根本没有完整内容,自然提取不到

优化后的代码

直接用Selenium获取浏览器渲染后的完整页面源码,再交给BeautifulSoup解析:

from selenium import webdriver
from bs4 import BeautifulSoup
import time

# 初始化Firefox浏览器
browser = webdriver.Firefox()
search_url = "https://www.google.co.in/search?rlz=1C1CHBD_enIN789IN790&ei=P4b9Wp4MxPP1A67gk-gI&q=%28%27United+States%27%2C+%27US+DOL+OASAM+-+OCIO%27%2C+%27200+CONSTITUTION+AVE+NW%27%29&oq=%28%27United+States%27%2C+%27US+DOL+OASAM+-+OCIO%27%2C+%27200+CONSTITUTION+AVE+NW%27%29&gs_l=psy-ab.3...44692.45689.0.46041.0.0.0.0.0.0.0.0..0.0....0...1c.1.64.psy-ab..0.0.0....0.DqJsrKbp_Js"

browser.get(search_url)
# 等待页面完全加载(可以根据网络情况调整时间,或者用更智能的显式等待)
time.sleep(3)

# 获取浏览器渲染后的完整页面源码
page_html = browser.page_source
soup = BeautifulSoup(page_html, 'html.parser')

# 遍历每个搜索结果的描述区域
for result_block in soup.find_all("div", class_="s"):
    desc_text = result_block.find("span", class_="st")
    if desc_text:
        # strip=False保留原始的换行和空格,避免内容压缩
        print(desc_text.get_text(strip=False))
    print("=== 搜索结果分割线 ===")

# 关闭浏览器
browser.quit()

这样就能拿到和浏览器里显示一致的完整描述文本了。


二、完整提取所有标签内容

问题出在哪?

你之前只在st类的元素里找em标签,但Google搜索结果里的加粗文本(em标签)可能出现在标题、链接甚至其他区域;另外如果页面还没加载完就执行查找,也会漏掉还没渲染出来的标签。

优化后的代码

用显式等待确保页面加载完成,然后直接查找整个页面的em标签:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

browser = webdriver.Firefox()
search_url = "https://www.google.co.in/search?rlz=1C1CHBD_enIN789IN790&ei=P4b9Wp4MxPP1A67gk-gI&q=%28%27United+States%27%2C+%27US+DOL+OASAM+-+OCIO%27%2C+%27200+CONSTITUTION+AVE+NW%27%29&oq=%28%27United+States%27%2C+%27US+DOL+OASAM+-+OCIO%27%2C+%27200+CONSTITUTION+AVE+NW%27%29&gs_l=psy-ab.3...44692.45689.0.46041.0.0.0.0.0.0.0.0..0.0....0...1c.1.64.psy-ab..0.0.0....0.DqJsrKbp_Js"

browser.get(search_url)

# 显式等待:等至少一个搜索结果描述出现,确保页面加载完成
wait = WebDriverWait(browser, 10)
wait.until(EC.presence_of_element_located((By.CLASS_NAME, "st")))

# 获取页面中所有的em标签
all_em_elements = browser.find_elements(By.TAG_NAME, "em")

# 逐个输出em标签的内容
for index, em_elem in enumerate(all_em_elements, start=1):
    print(f"第{index}个加粗内容:{em_elem.text}")

browser.quit()

如果只想提取搜索结果描述里的em,可以把查找范围限定在st类元素里,但一定要先等页面加载完成,避免漏抓。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:23:04