如何抓取谷歌搜索结果中首个非图片的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
相关产品推荐
相关产品推荐

