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

如何抓取谷歌搜索结果中首个非图片的LinkedIn公司页面链接

解决谷歌搜索结果中图片干扰的LinkedIn公司链接抓取方案

核心思路

放弃固定位置的XPath定位,转而通过精准筛选LinkedIn公司页面特征直接跳过图片等无关结果,从根源避免定位失效问题。

具体修改方案

1. 替换失效的定位逻辑

原代码硬取第一个搜索结果的XPath会被图片结果干扰,改为通过链接href属性筛选linkedin.com/company/(LinkedIn公司页面的固定路径),同时排除图片结果的容器。

2. 关键代码片段(替换原定位点击部分)

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 搜索完成后执行以下逻辑,替代原links定位代码
try:
    # 等待搜索结果加载(最多10秒),精准定位目标链接
    linkedin_link = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located(
            (By.XPATH, '//div[@id="rso"]//a[contains(@href, "linkedin.com/company/") and not(ancestor::div[contains(@class, "gI7X4e")])]')
        )
    )
    linkedin_link.click()
    print(driver.current_url)
except Exception as e:
    print(f"未找到目标公司页面: {e}")

3. 逻辑说明

  • contains(@href, "linkedin.com/company/"):只抓取LinkedIn官方公司主页,排除个人主页、职位页等无关链接
  • not(ancestor::div[contains(@class, "gI7X4e")]):谷歌图片结果的容器带有gI7X4e类,通过该条件直接跳过图片结果区域
  • WebDriverWait:替代直接定位,避免页面未加载完成导致的元素找不到问题,比固定延时更高效

4. 完整优化代码

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

# 初始化浏览器
driver = webdriver.Chrome()
driver.get("https://google.com")

companynameslist2 = ["示例公司A", "示例公司B"]  # 替换为你的公司列表

for company in companynameslist2:
    # 打开新窗口并切换
    driver.execute_script("window.open('');")
    driver.switch_to.window(driver.window_handles[-1])
    driver.get("https://google.com")
    
    # 执行搜索
    search_box = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.NAME, "q"))
    )
    linkedin_search = f'site:linkedin.com/company/ "{company}"'
    search_box.send_keys(linkedin_search)
    search_box.send_keys(Keys.ENTER)
    
    # 抓取并打开LinkedIn公司链接
    try:
        linkedin_link = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located(
                (By.XPATH, '//div[@id="rso"]//a[contains(@href, "linkedin.com/company/") and not(ancestor::div[contains(@class, "gI7X4e")])]')
            )
        )
        linkedin_link.click()
        print(f"{company}: {driver.current_url}")
    except Exception as e:
        print(f"{company} 未找到LinkedIn公司页面: {str(e)}")
    
    # 清理当前窗口,切回主窗口
    driver.close()
    driver.switch_to.window(driver.window_handles[0])

# 关闭浏览器
driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:55:16