如何用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
相关产品推荐
相关产品推荐

