当前位置: 首页 > news >正文

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); // 将字节数组写入到本地文件}
}
http://www.lryc.cn/news/173994.html

相关文章:

  • 笔试面试相关记录(5)
  • 四、C#—变量,表达式,运算符(2)
  • 【WSN】基于蚁群算法的WSN路由协议(最短路径)消耗节点能量研究(Matlab代码实现)
  • JVM的内存分配及垃圾回收
  • Python实现查询一个文件中的pdf文件中的关键字
  • 【计算机网络笔记一】网络体系结构
  • 硕士应聘大专老师
  • Gram矩阵
  • 【数据结构】七大排序算法详解
  • OpenCV之VideoCapture
  • ESP32微控制器与open62541库: 详细指南实现OPC UA通信协议_C语言实例
  • 怎样快速打开github.com
  • 【C#】.Net基础语法二
  • C++之this指针总结(二百二十)
  • C++——如何正确的使用STL中的vector?
  • 【C语言】模拟实现内存函数
  • Jenkins学习笔记3
  • 基于单片机火灾报警器仿真设计
  • 阿里测开面试大全(一)附答案完整版
  • STL-常用容器
  • 【owt】关闭microk8s 等无关服务
  • 【面试题】——Spring
  • 【算法思想-排序】根据另一个数组次序排序 - 力扣 1122 题
  • 毕业设计|基于stm32单片机的app视频遥控抽水灭火小车设计
  • 编译原生安卓aosp源码,实现硬改以及定位
  • 找单身狗。一个数组中只有两个数字出现一次,其他数字出现了两次,编写一个函数找出这两个只出现一次的数字
  • Java数据结构技巧
  • easyui disabled 属性设置
  • 使用容器运行Nginx应用及Docker命令
  • fastapi 基本介绍+使用