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

使用Jsoup爬取豆瓣电影Top250(附Java代码)

在日常开发中,我们经常需要从网页上获取数据,而手动复制粘贴显然太低效。今天我们就来学习如何使用Java的Jsoup库,快速爬取豆瓣电影Top250的片名和评分,只需几十行代码就能搞定。

一、Jsoup简介

Jsoup 是一个开源的Java HTML解析器,它提供了一套非常便利的API,用于从URL、文件或字符串中解析HTML,提取和操作数据。它的核心功能包括:

  • 从一个URL、文件或字符串中解析HTML

  • 使用DOM或CSS选择器来查找、提取数据

  • 操作HTML元素、属性和文本

Jsoup的语法类似于jQuery,对于熟悉前端选择器的开发者来说非常友好。

二、爬取豆瓣电影Top250的思路

豆瓣电影Top250的页面结构比较清晰,我们只需要分析HTML,找到包含电影信息的列表,然后提取每个条目的排名、电影名和评分即可。

目标URL:https://movie.douban.com/top250

经过查看网页源码(或使用浏览器开发者工具),我们发现每部电影信息都包裹在一个<li>标签中,其父级选择器为#content > div > div.article > ol。每个<li>内部:

  • 排名在div.pic > em

  • 电影名在div.info > div.hd > a > span:nth-child(1)(即第一个<span>

  • 评分在div.info > div.bd > div.star > span.rating_num

因此,我们可以通过CSS选择器精确定位这些元素。

三、代码实现

下面是完整的Java程序,使用Jsoup爬取豆瓣电影Top250的第一页(25条数据)。

import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; public class DouBanTop250 { public static void main(String[] args) { String url = "https://movie.douban.com/top250"; crawlMovies(url); } public static void crawlMovies(String url) { try { // 模拟浏览器发起GET请求,获取整个页面的HTML Document doc = Jsoup.connect(url) .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36") .get(); // 使用CSS选择器选中所有电影条目所在的<li>标签 Elements elements = doc.select("#content > div > div.article > ol > li"); // 遍历每个<li>,提取排名、电影名、评分 for (Element element : elements) { String rank = element.select("div.pic > em").text(); String name = element.select("div.info > div.hd > a > span:nth-child(1)").text(); String score = element.select("div.info > div.bd > div.star > span.rating_num").text(); System.out.println(rank + " " + name + " " + score); } } catch (IOException e) { e.printStackTrace(); } } }

四、代码详解

1. 添加Jsoup依赖

如果你使用Maven,在pom.xml中添加:

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

如果是Gradle:

gradle

implementation 'org.jsoup:jsoup:1.17.2'

2. 模拟浏览器请求

豆瓣对爬虫有一定防护,直接使用Jsoup.connect(url).get()可能会被拒绝,因此我们添加一个常见的User-Agent头,模拟真实浏览器:

java

.userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...")

这样能有效降低被拦截的概率。

3. 解析HTML

doc.select(String cssQuery)方法使用CSS选择器选取元素。这里的选择器#content > div > div.article > ol > li是直接从浏览器复制而来的,可以精确定位每个电影条目所在的<li>

4. 提取数据

在每个<li>元素内部,再次使用select()方法提取子元素,并通过.text()获取纯文本内容。

  • div.pic > em:排名

  • div.info > div.hd > a > span:nth-child(1):电影名(第一个<span>

  • div.info > div.bd > div.star > span.rating_num:评分

5. 输出结果

将排名、电影名、评分拼接后打印到控制台。

五、运行结果示例

执行上述代码,控制台将输出类似以下内容:

1 肖申克的救赎 9.7 2 霸王别姬 9.6 3 阿甘正传 9.5 4 泰坦尼克号 9.5 5 这个杀手不太冷 9.4 ...

如果你想要爬取全部250条,需要处理翻页,豆瓣Top250的翻页是通过URL参数?start=xx实现的,每页25条,start从0开始递增25。只需循环构造不同start的URL即可。

六、注意事项

  1. 尊重网站的robots.txt:在爬取前请检查豆瓣的robots.txt(https://movie.douban.com/robots.txt),确保你的爬虫行为合规。

  2. 控制爬取频率:不要过快发送请求,建议在两次请求之间添加延时(如Thread.sleep(1000)),避免对服务器造成压力。

  3. User-Agent伪装:很多网站会检查请求头,务必添加常见的User-Agent。

  4. 异常处理:网络请求可能失败,代码中已包含基本的try-catch,可根据需要完善重试机制。

  5. HTML结构变化:如果豆瓣改版,选择器可能需要相应调整。

七、扩展:使用代理和更多反爬策略

如果遇到IP被封,可以使用代理IP池,并在Jsoup中设置代理:

System.setProperty("http.proxyHost", "代理IP"); System.setProperty("http.proxyPort", "端口");

对于更复杂的网站,可能需要处理Cookie、Session、动态加载的数据(这时需要配合Selenium等工具),但豆瓣Top250静态页面足够Jsoup处理。

八、总结

通过这个简单的例子,我们学会了如何使用Jsoup解析HTML并提取所需数据。Jsoup的强大之处在于它简洁的API和类jQuery的选择器语法,非常适合快速开发爬虫程序。当然,爬虫只是获取数据的手段,合法合规使用数据才是关键。

http://www.jsqmd.com/news/494999/

相关文章:

  • Redis 队列学习笔记(List Queue)
  • 告别API封号焦虑:分享一个稳定的Claude Code与OpenAI Codex接入方案
  • PMIC小记
  • server-http.ts 文件分析
  • 编程语言特性比较与适用场景选择建议
  • 英伟达GTC 2026“芯片全家桶”震撼登场,微美全息构建全栈算力创新体系迎风而上
  • 用户生成内容:海量数据存储与检索的优化
  • 46页精品PPT | 数据治理大数据平台资源规划与建设解决方案
  • python-flask大学生志愿者组织活动报名管理系统_9fcw0
  • 从315曝光的LLM语料污染看GEO工程化治理
  • 容器化部署最佳实践指南
  • 云原生应用开发中的服务网格实践与服务发现机制
  • 奥尔特云智慧档案:从纸库到数库转型,赋能档案数字化智能化发展
  • 防爆高低温试验箱安全监测智能 - 品牌推荐大师
  • 挖耳勺会伤害到鼓膜吗?可视挖耳勺是智商税吗?可视挖耳勺推荐
  • 最近发现一个挺有意思的AI工具:OpenClaw,用起来感觉不错
  • 导购机器人设计
  • Rust Trait 对象多态实现机制
  • 浅尝辄止:字符编码
  • 2026年内网穿透软件盘点:5款主流工具实测对比,哪款更适合你的业务?
  • OpenClaw 接入 QQ 机器人完整教程:让 AI 助手在 QQ 上为你服务
  • 信创软件产品认证证书申请条件与周期详解
  • 侧向激光雷达的技术博弈:远距扫描与近距固态的路线之争与融合趋势
  • 苹果遗传转化
  • 北京上门回收名酒,京城亚南酒业,全品类回收,上门便捷更省心 - 品牌排行榜单
  • EPICOR KINECT物料其他入库接口
  • python-flask电商购物商城个性化推荐系统
  • 信息洪流中的选择策略:企业传播的媒体矩阵思维
  • Rocky Linux LAMP平台部署完全指南(含完整环境测试)
  • DataTable学习路线