基于Java爬取微博数据(四) 获取 图片 or 视频

news2024/11/24 22:36:36

基于Java爬取微博数据四 获取 图片 or 视频

  • 图片 or 视频
  • 转存 图片 or 视频
  • 注意点

前面已经讲述了基于 Java 爬取微博正文列表内容,微博用户主页内容以及导出爬取到的微博数据等操作,那么下面讲述一下如何处理微博正文中的图片/视频等内容。

图片 or 视频

对于微博正文来说,图片和视频不能同时存在,也就是说你的微博只能选择发9张以内的图片或者发1个视频,那么在爬取微博正文数据时,想要获取微博中的图片/视频该怎么操作呢?我们首先来看一下微博正文中图片或者视频的一些特点,选择任意一篇微博正文,利用浏览器工具选取任意一张图片
在这里插入图片描述
这里可以看到图片的链接。这里需要说明的是微博正文中的图片链接是做过防盗处理的,你直接复制图片链接到浏览器是无法打开的,但是你可以通过 Java 代码来转存 图片。
在这里插入图片描述
同样的方法,利用浏览器工具的抓取功能获取微博正文视频内容地址,视频内容是可以直接放在浏览器打开的,但是需要注意的是视频内容的链接地址有个有效期参数 Expires ,如果超过有效期再打开会提示 403 错误码
在这里插入图片描述
这里获取的视频链接地址通常是这样的

//locallimit.us.sinaimg.cn/o0/RSkMM0NElx08f30vCBPO01041200MgYx0E010.mp4?label=mp4_720p&template=1280x720.25.0&media_id=5036768815153197&tp=8x8A3El:YTkl0eM8&us=0&ori=1&bf=4&ot=h&lp=0000tfMx8&ps=mZ6WB&uid=66f6G2&ab=,8013-g0,3601-g27&Expires=1716360984&ssig=8XIVHnvPwu&KID=unistore,video

没有请求头 http 或者 https ,那么你可以直接将该链接放在浏览器,浏览器会自动适应请求头,视频内容是可以直接播放的。另外微博的默认请求头就是安全请求头 https
在这里插入图片描述
到这里关于微博正文中的图片 or 视频的大概情况介绍完了,下面可以转存图片 or 视频

转存 图片 or 视频

如果你需要微博正文中的图片 or 视频的话,那么你可以通过 Java 的方式获取图片 or 视频 内容,并转存到其他地方,这里我转存到本地电脑,整个 main 函数的代码如下 DemoWeiBoDown.java

package com.ruoyi.web.controller.demo.controller;

import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * dongao
 * 2024/5/20
 * 5月
 */
public class DemoWeiBoDown {
    public static void main(String[] args) {
        String imageUrl = "https://wx4.sinaimg.cn/orj360/001Q8zQmly1hpy4e694vyj60j60can2r02.jpg";
        String mp4Url = "https://locallimit.us.sinaimg.cn/o0/fn1ZOcw6lx08f0fwPoH601041200BRMn0E010.mp4?label=mp4_720p&template=1280x720.25.0&media_id=5036142555496496&tp=8x8A3El:7fHprYw&us=0&ori=1&bf=4&ot=h&lp=0000tfMx8&ps=mZ6WB&uid=66f6G2&ab=,8013-g0,3601-g36,3601-g27,3601-g27&Expires=1716201414&ssig=B05wQvtmef&KID=unistore,video";
        String filename = imageUrl.substring(imageUrl.lastIndexOf("/") + 1);
        String filename2 = mp4Url.substring(mp4Url.lastIndexOf("/") + 1, mp4Url.indexOf("?"));
        downloadPicture(imageUrl, "E:\\2024weibo\\"+filename);
        downloadPicture(mp4Url, "E:\\2024weibo\\"+filename2);
    }

    /**
     * 下载图片到指定路径
     *
     * @param imageUrl 图片的URL地址
     * @param savePath 图片保存的本地路径
     */
    public static void downloadPicture(String imageUrl, String savePath){

        BufferedInputStream in = null;
        FileOutputStream out = null;
        HttpURLConnection connection = null;
        try {
            // 创建URL对象并打开连接
            URL url = new URL(imageUrl);
            connection = (HttpURLConnection) url.openConnection();
            // 设置请求方法为GET
            connection.setRequestMethod("GET");
            // 建立连接
            connection.connect();

            // 获取响应码并判断是否下载成功
            int responseCode = connection.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) {
                // 创建输入流和输出流,用于读取和保存图片
                in = new BufferedInputStream(connection.getInputStream());
                out = new FileOutputStream(savePath);

                // 缓冲区,用于一次读取和写入一定量的数据
                byte[] buffer = new byte[1024];
                int bytesRead;
                // 循环读取直到没有数据
                while ((bytesRead = in.read(buffer)) != -1) {
                    out.write(buffer, 0, bytesRead);
                }
                System.out.println("图片/视频 下载成功,保存路径:" + savePath);
            } else {
                // 响应码不为HTTP_OK,下载失败
                System.out.println("无法下载图片/视频,响应码:" + responseCode);
            }

        }catch (Exception e) {
            // 捕获异常并打印堆栈信息
            e.printStackTrace();
        }finally {
            // 无论成功或失败,最后都关闭流和连接
            // 关闭输入流
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    // 将IO异常转为运行时异常抛出
                    throw new RuntimeException(e);
                }
            }
            // 关闭输出流
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    // 将IO异常转为运行时异常抛出
                    throw new RuntimeException(e);
                }
            }
            // 关闭连接
            if (connection != null) {
                connection.disconnect();
            }
        }
    }
}

执行当前 main 方法可以看到如下输出情况
在这里插入图片描述
这里的视频 响应码 403 就是因为视频链接的有效期已经过了,更换视频链接地址尝试后如下
在这里插入图片描述
那么这时去到我们的本地文件夹就可以看到刚才转存成功的图片和视频了
在这里插入图片描述
到这里,关于转存微博正文内容中的图片 or 视频的操作就完成了,整个过程比较简单顺畅,当然如果你需要转存到云存储也是可以的,只是需要改造一下获取到图片流 or 视频流后的操作就可以了。

注意点

这里需要说明的是,本文主要是探索基于 Java 爬取微博正文内容图片 or 视频内容实现,以及转存操作,大家有需要的可以相互学习一下。但是注意不可用于非法用途,或者恶意的爬取图片内容等,远离“破坏计算机信息系统罪”,慎重!慎重!慎重!

本文为转移文章,原文地址:https://developer.aliyun.com/article/1515269

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2063764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux笔记1

命令格式 命令行界面的提示符解析: [rootlocalhost ~]# root位置: 登录用户名 : 连接符号 localhost位置: 本机的主机名 ~位置: 当前的所在位置 #位置: 表示是超级管理员还是普通用户 超级管…

Cesium 自定义MaterialProperty原理解析

MaterialProperty是一个抽象接口类,它定义了Entity图元的材质要实现的属性和函数。这些属性和函数主要是cesium 内部调用,用于减少cesium 内部对材质的重复创建和缓存,减少内存开销。 1. Property 类 Property类是所有属性的抽象接口类&…

B2B⼤宗电商交易系统功能案例分析

B2B大宗电商交易系统是构建高效、安全、可扩展电子商务平台的重要基石。以下是对该系统后端架构与关键功能的详细解析: 后端架构 B2B大宗电商交易系统的后端架构通常涉及多个关键组件和技术,以确保系统的稳定运行和高效处理。主要组成部分包括&#xff…

UE4编安卓时Core模块为何只include Android文件夹?

Core模块 Core模块是整个引擎中最核心的模块。几乎UE4中的每个其他模块都导入Core。Engine\Source\Runtime\Core\Private下有很多文件夹&#xff0c;下面罗列一部分&#xff1a; G:\St\EngineSource\Engine\Source\Runtime\Core\Private 的目录 2024/07/18 12:02 <DIR…

AOC U27U2P创作设计旗舰——传递情感,用色彩说话!

摘要&#xff1a;每一次设计都是一种表达&#xff0c;每一次创作都是一次成长 并不是所有的路在一开始走的时候&#xff0c;都能找到正确的方向。对于设计师而言&#xff0c;在创作与设计的道路上&#xff0c;亦是如此。灵感的枯竭、无休止的改稿、色彩的偏差等等&#xff0c;…

基于springboot的校园失物招领系统--论文pf

TOC springboot483基于springboot的校园失物招领系统--论文pf 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人…

Linux yum提示Error downloading packages

很明显的错误&#xff0c;没有考虑过磁盘空间&#xff0c;记录一下。 Error downloading packages:gcc-4.8.5-44.el7.x86_64: Insufficient space in download directory /var/cache/yum/x86_64/7/base/packages* free 0 * needed 16 M使用du查看当前目录下所有文件大小 du …

mac安装ipa包【金铲铲为例】

mac安装ipa包 安装PlayCover 链接&#xff1a;https://github.com/PlayCover/PlayCover 1、点最新Releases 2、cmd ↓&#xff0c;拉到最下面下载dmg 3、安装 图标拖拽到Applications里 IPA下载 以金铲铲为例&#xff0c;良心砸壳包站点&#xff0c;有能力可以支持一下…

Python办公自动化 python-pptx模块的安装与使用【1】

学好办公自动化&#xff0c;走遍天下都不怕&#xff01;&#xff01; 前面已经学习了python自动处理Excel数据和自动生成word试卷的案例&#xff0c; 今天学习一下python中的python-pptx模块&#xff0c;主要用于自动化生成和更新PPT文件。主要是python-pptx的用法&#xff0c;…

react 的学习随记

npx create-react-app my-app 创建一个名叫my-app的react的项目 npm run eject 运行 显示config 文件夹 react jsx &#xff08;使用时将babel 将jsx转为js&#xff09; 单页面时需要引用 1&#xff0c;样式&#xff08;在虚拟dom时&#xff09; 1. 引用样式时 用classNa…

(第三十三天)

1. 设置主从从 mysql57 服务器 &#xff08; 1 &#xff09;配置主数据库 [rootmsater_5 ~] # systemctl stop filewalld [rootmsater_5 ~] # setenforce 0 [rootmsater_5 ~] # systemctl disable filewalld [rootmsater_5 ~] # ls anaconda-ks.cfg mysql-5.7.44-linux-g…

解决STM32使用J-Link可以擦除和读取但是无法烧录问题

现象 使用J-Link烧录模组固件&#xff0c;出现可以读取和擦除&#xff0c;但是无法烧录问题&#xff0c;提示错误如下&#xff1a; ERROR: Programming failed address 0x08000080 (program error)End of flash programmingERROR: Program failed 读出来的时候这个地址数据…

AWS EC2:助力中国企业扬帆出海

在全球化的今天&#xff0c;中国的企业家们正积极寻找机会走向世界舞台。在这个过程中&#xff0c;云计算成为了不可或缺的技术支撑。亚马逊AWS作为全球领先的云服务提供商&#xff0c;其EC2&#xff08;Elastic Compute Cloud&#xff09;弹性云服务器以其卓越的性能和广泛的基…

【学习笔记】灰色预测 GM(1,1) 模型 —— Matlab

文章目录 前言一、灰色预测模型灰色预测适用情况GM (1,1)模型 二、示例指数规律检验(原始数据级比检验)级比检验的定义GM(1,1) 模型的级比检验 模型求解求解微分方程 模型评价(检验模型对原始数据的拟合程度)残差检验级比偏差检验 三、代码实现----Matlab级比检验代码模型求解代…

jmeter中添加断言,使用包括匹配模式显示失败

1、在jmeter中为某个接口添加断言&#xff0c;测试模式中检查文本内容比较长时且模式匹配规则选择包括时则在运行时会提示失败&#xff0c;实际接口已经正确返回数据了。 2、这种情况下失败是因为测试模块中的检查文本内容过长&#xff0c;不应该在模式匹配规则中选择包括&…

“由于找不到msvcr110.dll无法继续执行”错误提示?msvcr110.dll在电脑中处于什么位置?

“由于找不到msvcr110.dll无法继续执行”的错误提示&#xff0c;是许多用户在使用基于Microsoft Visual C开发的应用程序时可能遇到的一个典型问题。这条错误消息指出系统缺少一个关键的动态链接库文件&#xff08;DLL&#xff09;&#xff0c;即 msvcr110.dll&#xff0c;这是…

融资管理系统项目

系列文章目录 第一章 基础知识、数据类型学习 第二章 万年历项目 第三章 代码逻辑训练习题 第四章 方法、数组学习 第五章 图书管理系统项目 第六章 面向对象编程&#xff1a;封装、继承、多态学习 第七章 封装继承多态习题 第八章 常用类、包装类、异常处理机制学习 第九章 集…

SpringBoot框架如何实现上传与下载查看文件

基于SpringBoot框架&#xff0c;如何实现文件的上传与下载查看 提要 本项目借鉴于spring-guides/gs-uploading-files: Uploading Files :: Learn how to build a Spring application that accepts multi-part file uploads. (github.com)SpringBoot官网学习文档关于如何下载文…

Git基础学习(一)

文章目录 一. Git1. 定义2. SVN与Git的的区别 一. Git 1. 定义 Git 是一种分布式版本控制系统&#xff0c;用于管理软件项目的源代码。它是由 Linux 之父 Linus Torvalds 开发的&#xff0c;并已经成为了现代软件开发领域中最流行的版本控制系统之一。 使用 Git 可以追踪代码…

旅游管理系统

TOC springboot0748旅游管理系统 第1章 绪论 1.1课题背景 计算机的普及和互联网时代的到来使信息的发布和传播更加方便快捷。用户可以通过计算机上的浏览器访问多个应用系统&#xff0c;从中获取一些可以满足用户需求的管理系统。网站系统有时更像是一个大型“展示平台”&a…