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

如何用Python从LinkedIn搜索结果提取企业URL?代码问题求解

解决LinkedIn企业搜索结果URL抓取失败的问题

你的代码里存在几个关键问题,导致无法正确抓取企业URL:

  • CSV表头错误:你定义的表头是Total Results,但实际要存储的是企业主页URL,需要修改为对应名称。
  • 选择器匹配不准确:app-aware-link后面多了个空格,LinkedIn的实际class没有这个后缀;而且这个class会匹配页面上很多非企业链接的元素,必须筛选出href包含/company/的链接,才能确保拿到企业主页地址。
  • 变量未定义+列表处理错误:a_href是find_all返回的列表,你直接调用link.get('href'),但link从未被定义过;就算列表有内容,也需要取第一个有效元素,同时要处理列表为空的边界情况。
  • 等待机制不足:仅依赖隐式等待可能无法确保搜索结果完全加载,建议用显式等待等待目标元素出现。

修正后的完整代码:

import csv
import time
import re
from bs4 import BeautifulSoup
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

# 读取关键词文件
with open("keywords.txt", "r") as file:
    keywords = file.read().splitlines()

# 初始化浏览器
edgedriver_path = '/path/to/edgedriver'
options = webdriver.EdgeOptions()
options.add_argument("--start-maximized")
driver = webdriver.Edge(options=options, executable_path=edgedriver_path)
wait = WebDriverWait(driver, 15)  # 显式等待最长15秒

# 登录LinkedIn
driver.get('https://www.linkedin.com/login')
email_input = wait.until(EC.presence_of_element_located((By.ID, 'username')))
password_input = wait.until(EC.presence_of_element_located((By.ID, 'password')))
email_input.send_keys('你的邮箱')
password_input.send_keys('你的密码')
password_input.send_keys(Keys.ENTER)
time.sleep(10)  # 登录后等待页面加载完成

# 创建CSV文件并写入正确表头
with open("results.csv", "w", newline="") as file:
    writer = csv.writer(file)
    writer.writerow(["Keyword", "Company LinkedIn URL"])

    # 遍历每个关键词搜索
    for keyword in keywords:
        search_url = f'https://www.linkedin.com/search/results/companies/?keywords={keyword}'
        driver.get(search_url)
        
        try:
            # 等待搜索结果区域加载完成
            wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'a.app-aware-link')))
            soup = BeautifulSoup(driver.page_source, "html.parser")
            
            # 筛选出指向企业主页的第一个链接(href包含/company/)
            company_links = soup.find_all('a', {'class': 'app-aware-link'}, href=re.compile(r'/company/'))
            if company_links:
                # 拼接完整URL(处理相对路径情况)
                company_url = f"https://www.linkedin.com{company_links[0]['href']}" if company_links[0]['href'].startswith('/') else company_links[0]['href']
                writer.writerow([keyword, company_url])
                print(f"Keyword: {keyword}, LinkedIn URL: {company_url}")
            else:
                writer.writerow([keyword, "Not found"])
                print(f"Keyword: {keyword}, LinkedIn URL: Not found")
        except Exception as e:
            # 捕获加载超时或其他异常,避免程序中断
            writer.writerow([keyword, "Error occurred"])
            print(f"Keyword: {keyword}, Error: {str(e)}")
        time.sleep(3)  # 搜索间隔,降低反爬风险

driver.quit()

关键修改说明:

  1. 替换CSV表头为Company LinkedIn URL,匹配实际存储内容。
  2. 用显式等待替代单纯隐式等待,确保搜索结果加载完成后再解析页面。
  3. 修正选择器:去掉class后的冗余空格,同时通过正则筛选仅指向企业主页的链接。
  4. 处理相对路径,确保生成完整的LinkedIn企业URL。
  5. 增加异常捕获,避免单个关键词搜索失败导致程序终止。
  6. 添加搜索间隔,降低触发LinkedIn反爬机制的概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:41:23