• Java 获取豆瓣电影TOP250


    对于爬虫,Java并不是最擅长的,但是也可以实现,此次主要用到的包有hutooljsoup

    • hutool是一个Java工具包,它简化了Java的各种API操作,包括文件操作、类型转换、HTTP、日期处理、JSON处理、加密解密等。它的目标是使Java的常见操作更简单,提供一个简洁易用的API,让开发者更高效地编写代码。
    • jsoup是一个用于处理HTML的Java库,它提供了非常方便的API来解析HTML文档,并进行文档操作。它可以用来提取HTML中的数据,进行HTML到XML的转换,清理不安全的HTML标签等。

    代码实现

    import cn.hutool.core.io.FileUtil;
    import cn.hutool.http.HttpResponse;
    import cn.hutool.http.HttpUtil;
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
    
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
    
    /**
     * @author BXB
     */
    public class DoubanFilm250 {
        public static void main(String[] args) {
            for (int i = 0; i < 226; i += 25) {
                String url = String.format("https://movie.douban.com/top250?start=%d&filter=", i);
                String request = request(url);
                select(request);
            }
        }
    
    
        public static String request(String url) {
            // 发送 GET 请求
            HttpResponse response = HttpUtil.createGet(url)
                    .timeout(5000)  // 设置超时时间
                    .header("User-Agent", "Mozilla/5.0")  // 设置请求头
                    .execute();
            return response.body();
        }
    
        public static void select(String body) {
            Document parse = Jsoup.parse(body);
            Element gridView = parse.getElementsByClass("grid_view").get(0);
            Elements children = gridView.children();
    
            try (
                    BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("C:/path/to/save/movieTop250.md", true));  // 修改为自己的地址
                    ) {
                bufferedWriter.write("| 电影名称 | 详情页地址  | 评分+金句    |\n");
                bufferedWriter.write("|:--------:|:--------:|:--------:|");
                bufferedWriter.newLine();
                for (Element child : children) {
                    // 获取电影名称
                    String movieName = child.select("div.info div.hd span.title").text();
                    System.out.println("电影名称: " + movieName + "写入成功");
                    bufferedWriter.write("| " + movieName + " | ");
    
                    // 获取海报链接
                    String posterUrl = child.select("div.pic img").attr("src");
                    saveImage(posterUrl, movieName);
    
                    // 获取详情页链接
                    String movieUrl = child.select("div.info a").attr("href");
                    bufferedWriter.write(  movieUrl + " | ");
    //
                    // 评分 金句
                    String text = child.select("div.bd span").text();
                    bufferedWriter.write(text + " | ");
                    bufferedWriter.newLine();
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    
        public static void saveImage (String imageUrl, String movieName) {
            String savePath = "C:/path/to/save/" + movieName.split("[/]")[0] + ".jpg"; // 修改为你要保存的路径和文件名
    
            byte[] imageBytes = HttpUtil.downloadBytes(imageUrl); // 下载图片字节数组
            FileUtil.writeBytes(imageBytes, savePath); // 将字节数组写入到本地文件
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
  • 相关阅读:
    【高级渲染特性】抗锯齿技术介绍
    python包引用方式总结
    如何压缩jpg图片的大小?可以一键压缩图片的软件有哪些?
    程序员的护城河
    Selenium—入门+案例
    纯Unity环境下,把一个object系列化成json并保存到本地,然后读取json再次反系列化成object
    三个数的最大积(贪心法)
    clang在编译时指定目标文件所需的最低macOS版本
    内存操作函数
    pdf文档内容提取pdfplumber、PyPDF2
  • 原文地址:https://blog.csdn.net/bao_14440/article/details/132912821