当前位置: 首页 > 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); // 将字节数组写入到本地文件}
}

相关文章:

Java 获取豆瓣电影TOP250

对于爬虫&#xff0c;Java并不是最擅长的&#xff0c;但是也可以实现&#xff0c;此次主要用到的包有hutool和jsoup。 hutool是一个Java工具包&#xff0c;它简化了Java的各种API操作&#xff0c;包括文件操作、类型转换、HTTP、日期处理、JSON处理、加密解密等。它的目标是使…...

笔试面试相关记录(5)

&#xff08;1&#xff09;不包含重复字符的最长子串的长度 #include <iostream> #include <string> #include <map>using namespace std;int getMaxLength(string& s) {int len s.size();map<char, int> mp;int max_len 0;int left 0;int i …...

四、C#—变量,表达式,运算符(2)

&#x1f33b;&#x1f33b; 目录 一、表达式1.1 什么是表达式1.2 表达式的基本组成 二、运算符2.1 算术运算符2.1.1 使用 / 运算符时的注意事项2.1.2 使用%运算符时的注意事项 2.2 赋值运算符2.2.1 简单赋值运算符2.2.2 复合赋值运算符 2.3 关系运算符2.4 逻辑运算符2.4.1 逻辑…...

【WSN】基于蚁群算法的WSN路由协议(最短路径)消耗节点能量研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

JVM的内存分配及垃圾回收

内存分配 在了解Java的内存管理前&#xff0c;需要知道JVM中的内存分配。 栈 存储局部变量。在方法的定义中或在方法中声明的变量为局部变量&#xff1b;栈内存中的数据在该方法结束&#xff08;返回或抛出异常或方法体运行到最后&#xff09;时自动释放栈中存放的数据结构为…...

Python实现查询一个文件中的pdf文件中的关键字

要求&#xff0c;查询一个文件中的pdf文件中的关键字&#xff0c;输出关键字所在PDF文件的文件名及对应的页数。 import os import PyPDF2def search_pdf_files(folder_path, keywords):# 初始化结果字典&#xff0c;以关键字为键&#xff0c;值为包含关键字的页面和文件名列表…...

【计算机网络笔记一】网络体系结构

IP和路由器概念 两台主机如何通信呢&#xff1f; 首先&#xff0c;主机的每个网卡都有一个全球唯一地址&#xff0c;MAC 地址&#xff0c;如 00:10:5A:70:33:61 查看 MAC 地址&#xff1a; windows: ipconfig / alllinux&#xff1a;ifconfig 或者 ip addr 同一个网络的多…...

硕士应聘大专老师

招聘信息 当地人社局、学校&#xff08;官方&#xff09; 公众号&#xff08;推荐&#xff09;&#xff1a; 辅导员招聘 厦门人才就业信息平台 高校人才网V 公告出完没多久就要考试面试&#xff0c;提前联系当地院校&#xff0c;问是否招人。 校招南方某些学校会直接去招老师。…...

Gram矩阵

Gram矩阵如何计算 Gram 矩阵是由一组向量的内积构成的矩阵。如果你有一组向量 v 1 , v 2 , … , v n v_1, v_2, \ldots, v_n v1​,v2​,…,vn​&#xff0c;Gram 矩阵 G G G 的元素 G i j G_{ij} Gij​ 就是向量 v i v_i vi​ 和向量 v j v_j vj​ 的内积。数学上&#x…...

【数据结构】七大排序算法详解

目录 ♫什么是排序 ♪排序的概念 ♪排序的稳定性 ♪排序的分类 ♪常见的排序算法 ♫直接插入排序 ♪基本思想 ♪算法实现 ♪算法稳定性 ♪时间复杂度 ♪空间复杂度 ♫希尔排序 ♪基本思想 ♪算法实现 ♪算法稳定性 ♪时间复杂度 ♪空间复杂度 ♫直接选择排序 ♪基本思想 ♪算法…...

OpenCV之VideoCapture

VideoCaptrue类对视频进行读取操作以及调用摄像头。 头文件&#xff1a; #include <opencv2/video.hpp> 主要函数如下&#xff1a; 构造函数 C: VideoCapture::VideoCapture(); C: VideoCapture::VideoCapture(const string& filename); C: VideoCapture::Video…...

ESP32微控制器与open62541库: 详细指南实现OPC UA通信协议_C语言实例

1. 引言 在现代工业自动化和物联网应用中&#xff0c;通信协议起着至关重要的作用。OPC UA&#xff08;开放平台通信统一架构&#xff09;是一个开放的、跨平台的通信协议&#xff0c;被广泛应用于工业4.0和物联网项目中。本文将详细介绍如何在ESP32微控制器上使用C语言和open…...

怎样快速打开github.com

访问这个网站很慢是因为有DNS污染&#xff0c;被一些别有用心的人搞了鬼了&#xff0c; 可以使用火狐浏览器开启火狐浏览器的远程dns解析就可以了.我试了一下好像单独这个办法不一定有用&#xff0c;要结合修改hosts文件方法&#xff0c;双重保障 好像就可以了...

【C#】.Net基础语法二

目录 一、字符串(String) 【1.1】字符串创建和使用 【1.2】字符串其他方法 【1.3】字符串格式化的扩展方法 【1.4】字符串空值和空对象比较 【1.5】字符串中的转移字符 【1.6】大写的String和小写的string 【1.7】StringBuilder类的重要性 二、数组(Array) 【2.1】声…...

C++之this指针总结(二百二十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…...

C++——如何正确的使用STL中的vector?

什么是vector&#xff1f; 在STL&#xff08;标准模板库&#xff09;中&#xff0c;vector是一种动态数组容器&#xff0c;可根据需要自动增长或缩小。它可以存储任意类型的元素&#xff0c;并且支持快速的随机访问。 vector是表示可变大小数组的序列容器vector采用的是连续的…...

【C语言】模拟实现内存函数

本篇文章目录 相关文章1. 模拟 memcpy 内存拷贝2. 模拟 memmove 内存移动 相关文章 【C语言】数据在内存中是以什么顺序存储的&#xff1f;【C语言】整数在内存中如何存储&#xff1f;又是如何进行计算使用的&#xff1f;【C语言】利用void*进行泛型编程【C语言】4.指针类型部…...

Jenkins学习笔记3

gitgithubjenkins&#xff1a; 架构图&#xff1a; 说明&#xff1a;jenkins知道github有更新了&#xff0c;就pull进行构建build&#xff0c;编译、自动化测试。然后部署到应用服务器。 maven java的项目构建工具。 在开发者电脑上创建空密码密钥对。 [rootgit-developer ~…...

基于单片机火灾报警器仿真设计

一、系统方案 1、本设计采用51单片机作为主控器。 2、DS18B20采集温度值送到液晶1602显示。 3、MQ2采集烟雾值&#xff0c;送到液晶1602显示。 4、按键设置温度报警值&#xff0c;大于报警值&#xff0c;声光报警。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计…...

阿里测开面试大全(一)附答案完整版

万字长文&#xff0c;建议收藏 1 什么是POM&#xff0c;为什么要使用它&#xff1f; POM是Page Object Model的简称&#xff0c;它是一种设计思想&#xff0c;而不是框架。大概的意思是&#xff0c;把一个一个页面&#xff0c;当做一个对象&#xff0c;页面的元素和元素之间操…...

18. 滑轮组机械效率计算

7. 滑轮组机械效率计算 功能介绍: 针对力学难点“机械效率”设计。用户设定物重、动滑轮重及提升高度,系统自动计算有用功、总功和机械效率。界面配有滑轮组示意图,动态演示绳子移动距离与物体上升距离的关系 (s=nhs=nhs=nh),帮助理解为何总功总是大于有用功以及如何提高机…...

C#实战:5步搞定阿里健康药品追溯码接口对接(附完整签名源码)

C#实战&#xff1a;5步高效对接阿里健康药品追溯码API 在医院和药店管理系统中&#xff0c;药品追溯功能已成为刚需。阿里健康提供的药品追溯码查询接口&#xff0c;能帮助医疗机构快速获取药品全流程信息。作为.NET开发者&#xff0c;你可能需要将这个功能集成到现有ERP系统中…...

Gemma 4重磅发布:256K超长上下文的多模态AI模型

Gemma 4重磅发布&#xff1a;256K超长上下文的多模态AI模型 【免费下载链接】gemma-4-26B-A4B-it 项目地址: https://ai.gitcode.com/hf_mirrors/google/gemma-4-26B-A4B-it 导语&#xff1a;Google DeepMind推出Gemma 4系列多模态AI模型&#xff0c;以256K超长上下文窗…...

【实战指南】Windows10链路聚合配置:从LBFO报错到NetSwitchTeam的完美切换

1. 为什么需要链路聚合&#xff1f;从原理到应用场景 当你用笔记本连着WiFi下载大文件时&#xff0c;突然需要视频会议&#xff0c;是不是常遇到网络卡顿&#xff1f;这就是单网口的瓶颈。链路聚合&#xff08;Link Aggregation&#xff09;就像把多条车道合并成高速公路&#…...

Gemini 2.0与Gemma混搭开发:手把手教你构建低成本AI代理系统

Gemini 2.0与Gemma混搭开发&#xff1a;构建低成本AI代理系统的实战指南 1. 双轨战略的技术架构设计 谷歌的闭源Gemini与开源Gemma组合为开发者提供了独特的混合部署可能。这种架构设计的核心在于分层处理&#xff1a;将计算密集型任务交给云端Gemini处理&#xff0c;而设备端则…...

2025年大中华区21个主要城市甲级写字楼市场数据

、大中华区主要城市甲级写字楼市场数据速览(2025年)美通社消息&#xff1a;全球领先的房地产服务公司戴德梁行发布《大中华区写字楼供应/需求前沿趋势》年度报告&#xff0c;针对2025年大中华区21个主要城市甲级写字楼市场的整体表现展开研究&#xff0c;聚焦市场供需关系深入分…...

告别手动打字!深求·墨鉴极简文档解析,3步搞定图片转Markdown

告别手动打字&#xff01;深求墨鉴极简文档解析&#xff0c;3步搞定图片转Markdown 1. 为什么需要图片转Markdown工具 在日常工作和学习中&#xff0c;我们经常会遇到需要将图片中的文字内容转换为可编辑文本的情况。传统的手动打字方式不仅效率低下&#xff0c;还容易出错。…...

MiniCPM-o-4.5-nvidia-FlagOS企业级方案:高可用服务器集群部署指南

MiniCPM-o-4.5-nvidia-FlagOS企业级方案&#xff1a;高可用服务器集群部署指南 1. 引言&#xff1a;当AI应用走向规模化 想象一下这个场景&#xff1a;你的团队基于MiniCPM-o-4.5-nvidia-FlagOS开发了一款智能客服应用&#xff0c;上线初期反响不错。但随着用户量激增&#x…...

YOLOE镜像从入门到精通:环境激活、代码预测、训练微调全流程

YOLOE镜像从入门到精通&#xff1a;环境激活、代码预测、训练微调全流程 1. 镜像环境准备与快速启动 1.1 环境配置检查 YOLOE官方镜像已经预装了所有必要的依赖项和工具链&#xff0c;确保开发者可以立即开始工作而无需担心环境配置问题。以下是关键环境信息&#xff1a; 项…...

像素剧本圣殿步骤详解:如何导出带角色关系图谱的交互式剧本HTML文档

像素剧本圣殿步骤详解&#xff1a;如何导出带角色关系图谱的交互式剧本HTML文档 1. 工具介绍与环境准备 像素剧本圣殿&#xff08;Pixel Script Temple&#xff09;是基于Qwen2.5-14B-Instruct深度微调的专业剧本创作工具。它不仅具备强大的剧本生成能力&#xff0c;还能将创…...