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

求助:使用BeautifulSoup爬取LinkedIn帖子图片src返回None问题排查

问题分析与解决方案

核心问题

  1. 动态内容渲染:LinkedIn大部分帖子内容是通过JavaScript动态加载的,直接用requests获取的初始HTML里并没有目标图片的DOM结构,所以find会返回None。
  2. 反爬机制拦截:未配置请求头的requests请求会被LinkedIn识别为非浏览器请求,返回的内容不完整。
  3. 选择器过于脆弱:你使用的class属性字符串太长且是动态生成的,LinkedIn经常会调整这类class名,导致选择器失效。

解决步骤

1. 先尝试添加请求头模拟浏览器请求

给requests添加合理的User-Agent,尽可能获取完整的初始内容:

from bs4 import BeautifulSoup
import requests

url = "https://www.linkedin.com/posts/aminayonis_stop-using-chatgpt-to-understand-academic-activity-7098649637711929344-cPm-?utm_source=share&utm_medium=member_desktop"

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}

session = requests.Session()
page = session.get(url, headers=headers)
soup = BeautifulSoup(page.text, "html.parser")

# 改用更稳定的选择器:定位帖子内容区的图片,比如找带有data-testid属性的图片容器
target_img = soup.find("img", {"data-testid": "post-image"})
if target_img:
    print(target_img.get("src"))
else:
    # 如果还是找不到,说明内容是JS加载的,需要用渲染工具
    print("目标图片未在初始HTML中找到,需使用JS渲染工具")

2. 应对动态渲染:使用Selenium加载完整页面

如果添加请求头后仍无法获取,说明内容完全是JS动态生成的,需要用Selenium模拟浏览器加载页面:

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

url = "https://www.linkedin.com/posts/aminayonis_stop-using-chatgpt-to-understand-academic-activity-7098649637711929344-cPm-?utm_source=share&utm_medium=member_desktop"

# 配置Chrome无头模式
chrome_options = Options()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")

driver = webdriver.Chrome(options=chrome_options)
driver.get(url)
# 等待页面加载完成
time.sleep(3)

soup = BeautifulSoup(driver.page_source, "html.parser")
target_img = soup.find("img", {"data-testid": "post-image"})
if target_img:
    print(target_img.get("src"))
else:
    # 备选选择器:找帖子内容里的所有img,过滤出符合尺寸的图片
    post_imgs = soup.select("div[data-id] img")
    for img in post_imgs:
        if "post" in img.get("alt", ""):
            print(img.get("src"))

driver.quit()

关键提示

  • LinkedIn的反爬机制严格,频繁爬取可能会被封禁IP,建议控制请求频率,必要时使用代理。
  • 页面元素的属性(如class、data-testid)可能会随网站更新变化,若选择器失效,需重新检查页面DOM结构调整选择器。

内容的提问来源于stack exchange,提问作者Vijith Kumar V

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:00:18