java通过Jsoup爬取下载抖音无水印视频(下载单个抖音视频)

本文章纯属学习专用,不能用于商业,如用于商业,后果自负。
分析网上一大堆,我也是从网上看过来的,然后整理下代码,本人懒,直接上代码:

添加相关依赖

<dependency>
	<groupId>cn.hutool</groupId>
	<artifactId>hutool-all</artifactId>
	<version>5.4.7</version>
</dependency>

<dependency>
	<groupId>org.jsoup</groupId>
	<artifactId>jsoup</artifactId>
	<version>1.11.3</version>
</dependency>

java代码

package com.jd.api.test;

import cn.hutool.core.map.MapUtil;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import org.jsoup.Connection;
import org.jsoup.Jsoup;

import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
/**
 *  通过分享链接下载无水印视频
 */
public class douyin {

    public static void main(String[] args) throws Exception {
//        String url = "https://v.douyin.com/JHR8buj/";
        String url = "“小心肝”的日常\uD83E\uDD70#安全第一  https://v.douyin.com/JHR8buj/ 复制此链接,打开抖音,直接观看视频!";
        final String videoPath = "https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=";
        url = decodeHttpUrl(url); //过滤链接,获取http连接地址
        Connection con = Jsoup.connect(url);

        con.header("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1");
        Connection.Response resp = con.method(Connection.Method.GET).execute();
        String strUrl = resp.url().toString();
        String itemId = strUrl.substring(strUrl.indexOf("video/"), strUrl.lastIndexOf("/")).replace("video/", "");
        String videoUrl = videoPath + itemId;
        String jsonStr = Jsoup.connect(videoUrl).ignoreContentType(true).execute().body();
        JSONObject json = new JSONObject(jsonStr);

        String videoAddress = json.getJSONArray("item_list").getJSONObject(0).getJSONObject("video").getJSONObject("play_addr").getJSONArray("url_list").get(0).toString();
        String desc = json.getJSONArray("item_list").getJSONObject(0).getStr("desc");
        System.out.println("抖音描述:"+desc);

        HashMap headers = MapUtil.newHashMap();
        headers.put("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1");
        String replace = videoAddress.replace("playwm", "play"); //替换成无水印链接
        System.out.println(replace);
        HttpResponse execute = HttpUtil.createGet(replace).addHeaders(headers).execute();

        String finalVideoAddress = execute.header("Location");
        //下载到指定文件路径
        downloadVideo(finalVideoAddress,desc);
    }

    /**
     * 过滤链接,获取http连接地址
     * @param url
     * @return
     */
    public static String decodeHttpUrl(String url) {
        int start = url.indexOf("http");
        int end = url.lastIndexOf("/");
        String decodeurl = url.substring(start, end);
        return decodeurl;
    }

    /**
     * 下载
     * @param videoAddress
     * @param desc
     */
    private static void downloadVideo(String videoAddress,String desc) {
        int byteRead;
        try {
            URL url = new URL(videoAddress);
            //获取链接
            URLConnection conn = url.openConnection();
            //输入流
            InputStream inStream = conn.getInputStream();
            //封装一个保存文件的路径对象
            File fileSavePath = new File("D:/douyin/"+desc+".mp4");
            //注:如果保存文件夹不存在,那么则创建该文件夹
            File fileParent = fileSavePath.getParentFile();
            if (!fileParent.exists()) {
                fileParent.mkdirs();
            }
            if(fileSavePath.exists()){ //如果文件存在,则删除原来的文件
                fileSavePath.delete();
            }
            //写入文件
            FileOutputStream fs = new FileOutputStream(fileSavePath);
            byte[] buffer = new byte[1024];
            while ((byteRead = inStream.read(buffer)) != -1) {
                fs.write(buffer, 0, byteRead);
            }
            inStream.close();
            fs.close();
            System.out.println("\n-----视频保存路径-----\n" + fileSavePath.getAbsolutePath());
        } catch (FileNotFoundException e) {
        } catch (IOException e) {
        }
    }
}

本文注意:此文章纯为了博主自己学习使用,如有侵权,请联系我,我会立马下架

1. 爬取网页标题 使用Jsoup.connect()连接到目标网页并使用get()方法获取网页内容。然后使用select()方法选取网页中的标题元素。 ``` Document doc = Jsoup.connect("http://www.example.com/").get(); String title = doc.select("title").text(); System.out.println(title); ``` 2. 爬取网页中的所有链接 使用Jsoup.connect()连接到目标网页并使用get()方法获取网页内容。然后使用select()方法选取网页中的所有链接元素,并遍历每个元素提取链接地址。 ``` Document doc = Jsoup.connect("http://www.example.com/").get(); Elements links = doc.select("a[href]"); for (Element link : links) { String linkUrl = link.attr("href"); System.out.println(linkUrl); } ``` 3. 爬取网页中的图片链接 使用Jsoup.connect()连接到目标网页并使用get()方法获取网页内容。然后使用select()方法选取网页中的所有图片元素,并遍历每个元素提取图片地址。 ``` Document doc = Jsoup.connect("http://www.example.com/").get(); Elements images = doc.select("img[src]"); for (Element image : images) { String imageUrl = image.attr("src"); System.out.println(imageUrl); } ``` 4. 爬取网页中的表格数据 使用Jsoup.connect()连接到目标网页并使用get()方法获取网页内容。然后使用select()方法选取网页中的所有表格元素,并遍历每个元素提取表格数据。 ``` Document doc = Jsoup.connect("http://www.example.com/").get(); Elements tables = doc.select("table"); for (Element table : tables) { Elements rows = table.select("tr"); for (Element row : rows) { Elements cells = row.select("td"); for (Element cell : cells) { String cellText = cell.text(); System.out.println(cellText); } } } ``` 5. 爬取网页中的表单数据 使用Jsoup.connect()连接到目标网页并使用get()方法获取网页内容。然后使用select()方法选取网页中的所有表单元素,并遍历每个元素提取表单数据。 ``` Document doc = Jsoup.connect("http://www.example.com/").get(); Elements forms = doc.select("form"); for (Element form : forms) { String actionUrl = form.attr("action"); String method = form.attr("method"); System.out.println("Action URL: " + actionUrl); System.out.println("Method: " + method); Elements inputs = form.select("input"); for (Element input : inputs) { String name = input.attr("name"); String value = input.attr("value"); System.out.println(name + ": " + value); } } ```
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值