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

Selenium爬取LinkedIn时BeautifulSoup查找block mt2 div返回null

问题根因
  • LinkedIn为重度JavaScript驱动的单页应用,页面核心业务内容全部由前端脚本动态渲染生成。调用wd.get()时Selenium默认仅等待初始静态HTML文档加载完成,不会等待脚本执行、动态节点渲染完毕,此时获取的page_source是未完成渲染的初始源码,自然不存在JS运行后才插入的<div class="block mt2">节点,你打印soup时仅能看到head区域的静态脚本、元信息标签就是最直接的证据。
  • 未携带有效登录态的Selenium请求会被LinkedIn反爬机制拦截,默认会跳转到登录/人机验证页,根本不会加载目标企业主页的实际内容。
修正步骤
  • 增加显式等待逻辑:获取页面源码前先轮询DOM树,确认目标元素已经渲染完成后再执行解析操作。不要使用固定时长的time.sleep()做等待,这种方式稳定性差、执行效率低,很容易出现等待时间不够或者不必要的等待。
  • 提前处理登录态:可以通过加载本地已登录的浏览器用户配置文件,或者在脚本启动后先完成登录流程,携带有效Cookie再访问目标页面,避免被内容拦截。
  • 选择稳定的定位属性:LinkedIn页面中ember*开头的ID是每次页面加载随机生成的,不要用这类动态属性做元素选择器,优先使用固定不变的class组合、语义化标签做定位。
修正后可运行代码
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
import csv

# 访问目标LinkedIn企业主页
wd.get("https://www.linkedin.com/company/pacific-retail-capital-partners/")

# 最长等待10秒,直到目标企业信息容器加载完成
try:
    WebDriverWait(wd, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "div.block.mt2"))
    )
except TimeoutError:
    print("页面加载超时,请检查登录状态、网络连接,或降低访问频率规避反爬")
    wd.quit()
    exit()

# 渲染完成后再获取源码解析
soup = BeautifulSoup(wd.page_source, "html.parser")
info_div = soup.find("div", {"class": "block mt2"})
company_name = info_div.find("h1").get_text(strip=True)

# 数据写入CSV文件
with open("linkedin_company_data.csv", "w", encoding="utf-8-sig", newline="") as csv_file:
    writer = csv.writer(csv_file)
    writer.writerow(["企业名称"])
    writer.writerow([company_name])
注意事项
  • 爬取过程中严格控制访问频率,高频、规律的请求很容易触发LinkedIn的风控规则,导致账号被限制、IP被封禁。
  • 批量爬取时优先复用本地浏览器的用户缓存,避免每次启动都重新登录,能大幅降低被识别为爬虫的概率。
  • 写入CSV时建议使用utf-8-sig编码,避免Windows系统下打开CSV出现中文乱码。

内容的提问来源于stack exchange,提问作者yash agarwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:18:20