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

如何从推文链接下载附带图片?Twitter API付费后的Python实现方案

如何从推文链接下载图片

一、手动下载方法(无需代码)

  • 打开目标推文链接,找到附带的图片并点击进入全屏查看模式
  • 右键点击图片,选择「图片另存为」(不同浏览器选项略有差异),即可将图片保存到本地
  • 若推文包含多张图片,重复上述步骤逐个保存即可

二、Python实现(无需付费Twitter API)

Twitter API不再免费后,可通过网页抓取方式获取图片链接并下载,以下是两种可行方案:

方案1:使用requests + BeautifulSoup(适用于静态加载推文)

此方法适合简单的单图/多图推文,若推文内容为动态渲染则可能失效。

  1. 安装依赖包:
pip install requests beautifulsoup4
  1. 示例代码:
import requests
from bs4 import BeautifulSoup
import os

def download_tweet_images(tweet_url, save_dir="tweet_images"):
    # 创建保存目录
    os.makedirs(save_dir, exist_ok=True)
    
    # 模拟浏览器请求头,避免被反爬拦截
    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"
    }
    
    try:
        # 获取推文网页内容
        response = requests.get(tweet_url, headers=headers)
        response.raise_for_status()
        
        # 解析HTML结构
        soup = BeautifulSoup(response.text, "html.parser")
        
        # 定位推文图片元素
        img_elements = soup.find_all("img", attrs={"data-testid": "tweetPhoto"})
        
        if not img_elements:
            print("该推文未附带图片")
            return
        
        # 批量下载图片
        for idx, img in enumerate(img_elements):
            img_url = img.get("data-src") or img.get("src")
            if not img_url:
                continue
            
            # 转换为高清原图链接(替换缩略图标识)
            if "?" in img_url:
                img_url = img_url.split("?")[0]
            img_url = img_url.replace("small", "orig").replace("medium", "orig").replace("large", "orig")
            
            # 下载并保存图片
            img_response = requests.get(img_url, headers=headers)
            img_response.raise_for_status()
            
            img_name = f"tweet_img_{idx+1}.jpg"
            save_path = os.path.join(save_dir, img_name)
            with open(save_path, "wb") as f:
                f.write(img_response.content)
            
            print(f"图片已保存:{save_path}")
    
    except Exception as e:
        print(f"下载出错:{str(e)}")

# 使用示例
tweet_link = "https://twitter.com/xxx/status/xxxxxx"
download_tweet_images(tweet_link)

方案2:使用selenium(适用于动态渲染推文)

若静态抓取无法获取图片,说明内容由JavaScript动态加载,可通过selenium模拟浏览器操作解决。

  1. 安装依赖包:
pip install selenium

需额外下载对应浏览器的驱动(如ChromeDriver),并确保其路径在系统环境变量中。

  1. 示例代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
import os
import time
import requests

def download_tweet_images_selenium(tweet_url, save_dir="tweet_images"):
    os.makedirs(save_dir, exist_ok=True)
    
    # 配置Chrome浏览器选项(无头模式不显示窗口)
    options = webdriver.ChromeOptions()
    options.add_argument("--headless=new")
    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=options)
    
    try:
        driver.get(tweet_url)
        time.sleep(3)  # 等待页面完全加载
        
        # 定位推文图片元素
        img_elements = driver.find_elements(By.CSS_SELECTOR, 'img[data-testid="tweetPhoto"]')
        
        if not img_elements:
            print("该推文未附带图片")
            return
        
        # 批量下载图片
        for idx, img in enumerate(img_elements):
            img_url = img.get_attribute("data-src") or img.get_attribute("src")
            if not img_url:
                continue
            
            # 转换为高清原图链接
            if "?" in img_url:
                img_url = img_url.split("?")[0]
            img_url = img_url.replace("small", "orig").replace("medium", "orig").replace("large", "orig")
            
            # 下载图片
            headers = {"User-Agent": options.arguments[1].split("=")[1]}
            img_response = requests.get(img_url, headers=headers)
            img_response.raise_for_status()
            
            img_name = f"tweet_img_{idx+1}.jpg"
            save_path = os.path.join(save_dir, img_name)
            with open(save_path, "wb") as f:
                f.write(img_response.content)
            
            print(f"图片已保存:{save_path}")
    
    except Exception as e:
        print(f"下载出错:{str(e)}")
    finally:
        driver.quit()

# 使用示例
tweet_link = "https://twitter.com/xxx/status/xxxxxx"
download_tweet_images_selenium(tweet_link)

注意事项

  • 频繁抓取可能触发Twitter反爬机制,建议添加合理延时,避免短时间内大量请求
  • 请严格遵守Twitter服务条款,勿用于批量抓取或商业用途
  • Twitter网页结构可能随时变更,若代码失效需根据最新HTML结构调整元素选择器

内容的提问来源于stack exchange,提问作者Yash Khasgiwala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:28:10