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

如何用Selenium自动翻页爬取LinkedIn埃及地区全部4000条招聘信息

实现逻辑

LinkedIn 招聘搜索页采用「单页懒加载 + 分页」的混合加载模式:单页最多展示25条岗位,需要滚动到页面底部才能触发所有25条岗位渲染完成;全部25条加载完成后可点击分页栏的下一页按钮进入下一批岗位列表,重复滚动+抓取+翻页流程直到下一页按钮不可点击,即可完成全量数据爬取。

完整实现代码

首先导入所需依赖:

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
import time

核心执行逻辑:

# 初始化浏览器(以Chrome为例,需提前配置对应版本的chromedriver)
browser = webdriver.Chrome()
# 先跳转登录页完成账号登录,未登录状态会被限制只能查看少量岗位
browser.get("https://www.linkedin.com/login")
time.sleep(30) # 预留30秒手动完成账号密码输入、人机验证,避免反爬拦截

# 跳转至目标埃及招聘搜索页
browser.get("https://www.linkedin.com/jobs/search/?geoId=106155005&location=Egypt")
time.sleep(5)

# 存储全量爬取数据的列表
all_jobs = []

while True:
    # 1. 滚动加载当前页全部25条岗位
    last_height = browser.execute_script("return document.body.scrollHeight")
    while True:
        # 滚动到页面底部触发懒加载
        browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(2)
        # 对比滚动前后页面高度,高度无变化说明当前页已全部加载完成
        new_height = browser.execute_script("return document.body.scrollHeight")
        if new_height == last_height:
            break
        last_height = new_height
    
    # 2. 抓取当前页的岗位名称、公司名称
    job_titles = browser.find_elements(By.CSS_SELECTOR, "a.job-card-list__title")
    company_names = browser.find_elements(By.CSS_SELECTOR, "a.job-card-container__company-name")
    # 逐条匹配存入总列表,避免索引错位
    for title, company in zip(job_titles, company_names):
        all_jobs.append({
            "job_title": title.text,
            "company_name": company.text
        })
    
    # 3. 尝试点击下一页,无可用下一页则终止循环
    try:
        next_btn = WebDriverWait(browser, 10).until(
            # 英文界面需把aria-label的值改为'Next'
            EC.element_to_be_clickable((By.CSS_SELECTOR, "button[aria-label='下一页']"))
        )
        next_btn.click()
        time.sleep(3)
    except:
        # 找不到可点击的下一页按钮,说明已经到最后一页
        break

# 输出爬取结果
print(f"总共抓取到{len(all_jobs)}条岗位信息:")
for job in all_jobs:
    print(job)
注意事项
  • 必须提前登录LinkedIn账号,未登录状态下最多只能抓取前100条左右公开岗位,且极易触发反爬限制
  • 可根据自身网络情况调整代码中的等待时长,不要设置过高爬取频率,避免账号被临时限制访问
  • 若使用英文界面的LinkedIn,需要将下一页按钮的aria-label属性值从「下一页」改为Next,否则会找不到下一页按钮

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:18:02