diff --git a/project/MovieCrawler.java b/project/MovieCrawler.java new file mode 100644 index 0000000..3445e2a --- /dev/null +++ b/project/MovieCrawler.java @@ -0,0 +1,520 @@ +import java.io.*; +import java.net.*; +import java.nio.charset.StandardCharsets; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +public class MovieCrawler { + + private static final String BASE_URL = "https://movie.douban.com/top250"; + private static final int MAX_PAGES = 10; + private static final String OUTPUT_DIR = "D:/"; + + public static void main(String[] args) { + System.out.println("=".repeat(80)); + System.out.println("豆瓣电影Top250爬虫与数据分析系统"); + System.out.println("=".repeat(80)); + + long startTime = System.currentTimeMillis(); + + try { + List movies = crawlMovies(); + + if (movies.isEmpty()) { + System.err.println("未能爬取到任何电影数据,请检查网络连接或稍后重试。"); + return; + } + + System.out.println("\n数据爬取完成,共获取 " + movies.size() + " 部电影数据"); + System.out.println("开始数据分析..."); + + analyzeMovies(movies); + + System.out.println("\n开始保存数据..."); + + saveData(movies); + + long endTime = System.currentTimeMillis(); + long duration = (endTime - startTime) / 1000; + + System.out.println("\n" + "=".repeat(80)); + System.out.println("所有任务完成!"); + System.out.println("总耗时: " + duration + " 秒"); + System.out.println("输出文件位置: " + OUTPUT_DIR); + System.out.println("=".repeat(80)); + + } catch (Exception e) { + System.err.println("程序执行出错: " + e.getMessage()); + e.printStackTrace(); + } + } + + private static List crawlMovies() throws InterruptedException { + List movies = new ArrayList<>(); + + for (int page = 0; page < MAX_PAGES; page++) { + int start = page * 25; + String url = BASE_URL + "?start=" + start; + + try { + System.out.println("正在爬取第 " + (page + 1) + " 页..."); + List pageMovies = crawlPage(url, page * 25 + 1); + movies.addAll(pageMovies); + + if (page < MAX_PAGES - 1) { + Thread.sleep(2000); + } + } catch (Exception e) { + System.err.println("爬取第 " + (page + 1) + " 页失败: " + e.getMessage()); + } + } + + return movies; + } + + private static List crawlPage(String url, int startRank) throws Exception { + String html = fetchHtml(url); + List movies = new ArrayList<>(); + + Pattern moviePattern = Pattern.compile("
(.*?)
\s*", Pattern.DOTALL); + Matcher movieMatcher = moviePattern.matcher(html); + + int rank = startRank; + while (movieMatcher.find()) { + String movieHtml = movieMatcher.group(1); + Movie movie = parseMovie(movieHtml, rank++); + if (movie != null) { + movies.add(movie); + System.out.printf(" [%d] %s - %.1f分\n", movie.getRank(), movie.getTitle(), movie.getRating()); + } + } + + return movies; + } + + private static String fetchHtml(String url) throws Exception { + URL obj = new URL(url); + HttpURLConnection con = (HttpURLConnection) obj.openConnection(); + con.setRequestMethod("GET"); + con.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"); + con.setConnectTimeout(10000); + con.setReadTimeout(10000); + + int responseCode = con.getResponseCode(); + if (responseCode != HttpURLConnection.HTTP_OK) { + throw new Exception("HTTP error code: " + responseCode); + } + + BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream(), StandardCharsets.UTF_8)); + String inputLine; + StringBuilder content = new StringBuilder(); + + while ((inputLine = in.readLine()) != null) { + content.append(inputLine).append("\n"); + } + + in.close(); + con.disconnect(); + + return content.toString(); + } + + private static Movie parseMovie(String html, int rank) { + Movie movie = new Movie(); + movie.setRank(rank); + + // 解析标题 + Pattern titlePattern = Pattern.compile("(.*?)"); + Matcher titleMatcher = titlePattern.matcher(html); + if (titleMatcher.find()) { + movie.setTitle(cleanText(titleMatcher.group(1))); + } + + // 解析评分 + Pattern ratingPattern = Pattern.compile("(.*?)"); + Matcher ratingMatcher = ratingPattern.matcher(html); + if (ratingMatcher.find()) { + try { + movie.setRating(Double.parseDouble(cleanText(ratingMatcher.group(1)))); + } catch (NumberFormatException e) { + movie.setRating(0.0); + } + } + + // 解析评价人数 + Pattern ratingPeoplePattern = Pattern.compile("(\d+)人评价"); + Matcher ratingPeopleMatcher = ratingPeoplePattern.matcher(html); + if (ratingPeopleMatcher.find()) { + try { + movie.setRatingPeople(Integer.parseInt(ratingPeopleMatcher.group(1))); + } catch (NumberFormatException e) { + movie.setRatingPeople(0); + } + } + + // 解析详细信息 + Pattern infoPattern = Pattern.compile("
\s*

(.*?)

", Pattern.DOTALL); + Matcher infoMatcher = infoPattern.matcher(html); + if (infoMatcher.find()) { + String info = cleanText(infoMatcher.group(1)); + movie.setInfo(info); + movie.setYear(extractYear(info)); + movie.setDirector(extractDirector(info)); + } + + // 解析推荐语 + Pattern quotePattern = Pattern.compile("(.*?)"); + Matcher quoteMatcher = quotePattern.matcher(html); + if (quoteMatcher.find()) { + movie.setQuote(cleanText(quoteMatcher.group(1))); + } else { + movie.setQuote("暂无推荐语"); + } + + return movie; + } + + private static String cleanText(String text) { + if (text == null || text.isEmpty()) { + return ""; + } + return text.replaceAll("<.*?>", "").replaceAll("\\s+", " ").trim(); + } + + private static String extractYear(String text) { + if (text == null || text.isEmpty()) { + return "未知"; + } + Pattern pattern = Pattern.compile("(\\d{4})"); + Matcher matcher = pattern.matcher(text); + if (matcher.find()) { + return matcher.group(1); + } + return "未知"; + } + + private static String extractDirector(String info) { + if (info == null || info.isEmpty()) { + return "未知"; + } + String cleaned = info.trim(); + if (cleaned.startsWith("导演:")) { + int endIndex = cleaned.indexOf("主演:"); + if (endIndex == -1) { + endIndex = cleaned.indexOf("类型:"); + } + if (endIndex == -1) { + endIndex = cleaned.length(); + } + String directorPart = cleaned.substring(3, endIndex).trim(); + String[] directors = directorPart.split("/"); + if (directors.length > 0) { + return directors[0].trim(); + } + } + return "未知"; + } + + private static void analyzeMovies(List movies) { + System.out.println("\n" + "=".repeat(80)); + System.out.println("豆瓣电影Top250数据分析报告"); + System.out.println("=".repeat(80)); + + analyzeRatingDistribution(movies); + analyzeYearDistribution(movies); + analyzeDirectorRanking(movies); + analyzeTopRatedMovies(movies); + analyzeMostPopularMovies(movies); + } + + private static void analyzeRatingDistribution(List movies) { + System.out.println("\n【评分分布统计】"); + System.out.println("-".repeat(80)); + + Map ratingDistribution = movies.stream() + .collect(Collectors.groupingBy( + movie -> Math.round(movie.getRating() * 10.0) / 10.0, + TreeMap::new, + Collectors.counting() + )); + + System.out.printf("%-10s %-15s %-15s\n", "评分区间", "电影数量", "占比"); + System.out.println("-".repeat(80)); + + int total = movies.size(); + for (Map.Entry entry : ratingDistribution.entrySet()) { + double percentage = (entry.getValue() * 100.0) / total; + System.out.printf("%-10.1f %-15d %-14.2f%%\n", entry.getKey(), entry.getValue(), percentage); + } + + double avgRating = movies.stream() + .mapToDouble(Movie::getRating) + .average() + .orElse(0.0); + System.out.printf("\n平均评分: %.2f\n", avgRating); + } + + private static void analyzeYearDistribution(List movies) { + System.out.println("\n【年份分布统计】"); + System.out.println("-".repeat(80)); + + Map yearDistribution = movies.stream() + .filter(movie -> !"未知".equals(movie.getYear())) + .collect(Collectors.groupingBy( + Movie::getYear, + TreeMap::new, + Collectors.counting() + )); + + System.out.printf("%-10s %-15s\n", "年份", "电影数量"); + System.out.println("-".repeat(80)); + + yearDistribution.entrySet().stream() + .sorted(Map.Entry.comparingByValue().reversed()) + .limit(10) + .forEach(entry -> System.out.printf("%-10s %-15d\n", entry.getKey(), entry.getValue())); + + String mostProductiveYear = yearDistribution.entrySet().stream() + .max(Map.Entry.comparingByValue()) + .map(Map.Entry::getKey) + .orElse("未知"); + + System.out.printf("\n电影产量最高的年份: %s\n", mostProductiveYear); + } + + private static void analyzeDirectorRanking(List movies) { + System.out.println("\n【导演作品排行】"); + System.out.println("-".repeat(80)); + + Map directorCount = movies.stream() + .filter(movie -> !"未知".equals(movie.getDirector())) + .collect(Collectors.groupingBy( + Movie::getDirector, + Collectors.counting() + )); + + List> topDirectors = directorCount.entrySet().stream() + .sorted(Map.Entry.comparingByValue().reversed()) + .limit(10) + .collect(Collectors.toList()); + + System.out.printf("%-5s %-30s %-15s\n", "排名", "导演", "作品数量"); + System.out.println("-".repeat(80)); + + for (int i = 0; i < topDirectors.size(); i++) { + Map.Entry entry = topDirectors.get(i); + System.out.printf("%-5d %-30s %-15d\n", i + 1, entry.getKey(), entry.getValue()); + } + } + + private static void analyzeTopRatedMovies(List movies) { + System.out.println("\n【高分电影TOP10】"); + System.out.println("-".repeat(80)); + + System.out.printf("%-5s %-40s %-10s %-10s\n", "排名", "电影名称", "评分", "年份"); + System.out.println("-".repeat(80)); + + movies.stream() + .sorted(Comparator.comparing(Movie::getRating).reversed()) + .limit(10) + .forEach(movie -> System.out.printf("%-5d %-40s %-10.1f %-10s\n", + movie.getRank(), movie.getTitle(), movie.getRating(), movie.getYear())); + } + + private static void analyzeMostPopularMovies(List movies) { + System.out.println("\n【最受关注电影TOP10】"); + System.out.println("-".repeat(80)); + + System.out.printf("%-5s %-40s %-15s %-10s\n", "排名", "电影名称", "评价人数", "评分"); + System.out.println("-".repeat(80)); + + movies.stream() + .sorted(Comparator.comparing(Movie::getRatingPeople).reversed()) + .limit(10) + .forEach(movie -> System.out.printf("%-5d %-40s %-15d %-10.1f\n", + movie.getRank(), movie.getTitle(), movie.getRatingPeople(), movie.getRating())); + } + + private static void saveData(List movies) { + saveToCSV(movies, OUTPUT_DIR + "douban_movies.csv"); + saveToJSON(movies, OUTPUT_DIR + "douban_movies.json"); + saveToText(movies, OUTPUT_DIR + "douban_movies.txt"); + } + + private static void saveToCSV(List movies, String filename) { + try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename, StandardCharsets.UTF_8))) { + writer.write("排名,电影名称,评分,评价人数,年份,导演,推荐语\n"); + + for (Movie movie : movies) { + String line = String.format("%d,%s,%.1f,%d,%s,%s,%s\n", + movie.getRank(), + escapeCSV(movie.getTitle()), + movie.getRating(), + movie.getRatingPeople(), + movie.getYear(), + escapeCSV(movie.getDirector()), + escapeCSV(movie.getQuote())); + writer.write(line); + } + + System.out.println("CSV数据已保存到: " + filename); + } catch (IOException e) { + System.err.println("保存CSV文件失败: " + e.getMessage()); + } + } + + private static String escapeCSV(String text) { + if (text == null) { + return ""; + } + if (text.contains(",") || text.contains("\"") || text.contains("\n")) { + return "\"" + text.replace("\"", "\"\"") + "\""; + } + return text; + } + + private static void saveToJSON(List movies, String filename) { + try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename, StandardCharsets.UTF_8))) { + StringBuilder json = new StringBuilder(); + json.append("[\n"); + + for (int i = 0; i < movies.size(); i++) { + Movie movie = movies.get(i); + json.append(" {\n"); + json.append(" \"rank\": ").append(movie.getRank()).append(",\n"); + json.append(" \"title\": \"").append(escapeJSON(movie.getTitle())).append("\",\n"); + json.append(" \"rating\": ").append(movie.getRating()).append(",\n"); + json.append(" \"ratingPeople\": ").append(movie.getRatingPeople()).append(",\n"); + json.append(" \"year\": \"").append(movie.getYear()).append("\",\n"); + json.append(" \"director\": \"").append(escapeJSON(movie.getDirector())).append("\",\n"); + json.append(" \"quote\": \"").append(escapeJSON(movie.getQuote())).append("\"\n"); + json.append(" }"); + + if (i < movies.size() - 1) { + json.append(","); + } + json.append("\n"); + } + + json.append("]"); + writer.write(json.toString()); + System.out.println("JSON数据已保存到: " + filename); + } catch (IOException e) { + System.err.println("保存JSON文件失败: " + e.getMessage()); + } + } + + private static String escapeJSON(String text) { + if (text == null) { + return ""; + } + return text.replace("\\", "\\\\") + .replace("\"", "\\\"") + .replace("\n", "\\n") + .replace("\r", "\\r") + .replace("\t", "\\t"); + } + + private static void saveToText(List movies, String filename) { + try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename, StandardCharsets.UTF_8))) { + writer.write("豆瓣电影Top250评分数据\n"); + writer.write("爬取时间: " + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "\n"); + writer.write("=".repeat(80) + "\n\n"); + + for (Movie movie : movies) { + writer.write(String.format("排名: %d\n", movie.getRank())); + writer.write(String.format("电影名称: %s\n", movie.getTitle())); + writer.write(String.format("评分: %.1f\n", movie.getRating())); + writer.write(String.format("评价人数: %d人\n", movie.getRatingPeople())); + writer.write(String.format("年份: %s\n", movie.getYear())); + writer.write(String.format("导演: %s\n", movie.getDirector())); + writer.write(String.format("详细信息: %s\n", movie.getInfo())); + writer.write(String.format("推荐语: %s\n", movie.getQuote())); + writer.write("-".repeat(80) + "\n\n"); + } + + System.out.println("文本数据已保存到: " + filename); + } catch (IOException e) { + System.err.println("保存文本文件失败: " + e.getMessage()); + } + } + + static class Movie { + private int rank; + private String title; + private double rating; + private int ratingPeople; + private String year; + private String director; + private String info; + private String quote; + + public int getRank() { + return rank; + } + + public void setRank(int rank) { + this.rank = rank; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public double getRating() { + return rating; + } + + public void setRating(double rating) { + this.rating = rating; + } + + public int getRatingPeople() { + return ratingPeople; + } + + public void setRatingPeople(int ratingPeople) { + this.ratingPeople = ratingPeople; + } + + public String getYear() { + return year; + } + + public void setYear(String year) { + this.year = year; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public String getQuote() { + return quote; + } + + public void setQuote(String quote) { + this.quote = quote; + } + } +} \ No newline at end of file diff --git a/project/douban_movies.csv b/project/douban_movies.csv new file mode 100644 index 0000000..bf83805 --- /dev/null +++ b/project/douban_movies.csv @@ -0,0 +1,251 @@ +排名,电影名称,评分,评价人数,年份,导演,推荐语 +1,肖申克的救赎,9.7,0,1994,弗兰克·德拉邦特 Frank Darabont,暂无推荐语 +2,霸王别姬,9.6,0,1993,陈凯歌 Kaige Chen,暂无推荐语 +3,泰坦尼克号,9.5,0,1997,詹姆斯·卡梅隆 James Cameron,暂无推荐语 +4,阿甘正传,9.5,0,1994,罗伯特·泽米吉斯 Robert Zemeckis,暂无推荐语 +5,千与千寻,9.4,0,2001,宫崎骏 Hayao Miyazaki,暂无推荐语 +6,美丽人生,9.5,0,1997,罗伯托·贝尼尼 Roberto Benigni,暂无推荐语 +7,星际穿越,9.4,0,2014,克里斯托弗·诺兰 Christopher Nolan,暂无推荐语 +8,这个杀手不太冷,9.4,0,1994,吕克·贝松 Luc Besson,暂无推荐语 +9,盗梦空间,9.4,0,2010,克里斯托弗·诺兰 Christopher Nolan,暂无推荐语 +10,楚门的世界,9.4,0,1998,彼得·威尔 Peter Weir,暂无推荐语 +11,辛德勒的名单,9.5,0,1993,史蒂文·斯皮尔伯格 Steven Spielberg,暂无推荐语 +12,忠犬八公的故事,9.4,0,2009,莱塞·霍尔斯道姆 Lasse Hallström,暂无推荐语 +13,海上钢琴师,9.3,0,1998,朱塞佩·托纳多雷 Giuseppe Tornatore,暂无推荐语 +14,疯狂动物城,9.3,0,2016,拜伦·霍华德 Byron Howard,暂无推荐语 +15,三傻大闹宝莱坞,9.2,0,2009,拉库马·希拉尼 Rajkumar Hirani,暂无推荐语 +16,机器人总动员,9.3,0,2008,安德鲁·斯坦顿 Andrew Stanton,暂无推荐语 +17,放牛班的春天,9.3,0,2004,克里斯托夫·巴拉蒂 Christophe Barratier,暂无推荐语 +18,无间道,9.3,0,2002,刘伟强,暂无推荐语 +19,控方证人,9.6,0,1957,比利·怀尔德 Billy Wilder,暂无推荐语 +20,寻梦环游记,9.1,0,2017,李·昂克里奇 Lee Unkrich,暂无推荐语 +21,大话西游之大圣娶亲,9.2,0,1995,刘镇伟 Jeffrey Lau,暂无推荐语 +22,熔炉,9.3,0,2011,黄东赫 Dong-hyuk Hwang,暂无推荐语 +23,触不可及,9.3,0,2011,奥利维·那卡什 Olivier Nakache,暂无推荐语 +24,教父,9.3,0,1972,弗朗西斯·福特·科波拉 Francis Ford Coppola,暂无推荐语 +25,末代皇帝,9.3,0,1987,贝纳尔多·贝托鲁奇 Bernardo Bertolucci,暂无推荐语 +26,哈利·波特与魔法石,9.2,0,2001,Chris Columbus,暂无推荐语 +27,当幸福来敲门,9.1,0,2006,加布里尔·穆奇诺 Gabriele Muccino,暂无推荐语 +28,龙猫,9.2,0,1988,宫崎骏 Hayao Miyazaki,暂无推荐语 +29,活着,9.3,0,1994,张艺谋 Yimou Zhang,暂无推荐语 +30,怦然心动,9.1,0,2010,罗伯·莱纳 Rob Reiner,暂无推荐语 +31,蝙蝠侠:黑暗骑士,9.2,0,2008,克里斯托弗·诺兰 Christopher Nolan,暂无推荐语 +32,指环王3:王者无敌,9.3,0,2003,彼得·杰克逊 Peter Jackson,暂无推荐语 +33,我不是药神,9.0,0,2018,文牧野 Muye Wen,暂无推荐语 +34,乱世佳人,9.3,0,1939,维克多·弗莱明 Victor Fleming,暂无推荐语 +35,飞屋环游记,9.1,0,2009,彼特·道格特 Pete Docter,暂无推荐语 +36,让子弹飞,9.0,0,2010,姜文 Wen Jiang,暂无推荐语 +37,哈尔的移动城堡,9.1,0,2004,宫崎骏 Hayao Miyazaki,暂无推荐语 +38,十二怒汉,9.4,0,1957,西德尼·吕美特 Sidney Lumet,暂无推荐语 +39,海蒂和爷爷,9.3,0,2015,阿兰·葛斯彭纳 Alain Gsponer,暂无推荐语 +40,素媛,9.3,0,2013,李濬益 Jun-ik Lee,暂无推荐语 +41,猫鼠游戏,9.1,0,2002,史蒂文·斯皮尔伯格 Steven Spielberg,暂无推荐语 +42,天空之城,9.2,0,1986,宫崎骏 Hayao Miyazaki,暂无推荐语 +43,鬼子来了,9.3,0,2000,姜文 Wen Jiang,暂无推荐语 +44,摔跤吧!爸爸,9.0,0,2016,涅提·蒂瓦里 Nitesh Tiwari,暂无推荐语 +45,少年派的奇幻漂流,9.1,0,2012,李安 Ang Lee,暂无推荐语 +46,钢琴家,9.3,0,2002,罗曼·波兰斯基 Roman Polanski,暂无推荐语 +47,指环王2:双塔奇兵,9.2,0,2002,彼得·杰克逊 Peter Jackson,暂无推荐语 +48,死亡诗社,9.2,0,1989,彼得·威尔 Peter Weir,暂无推荐语 +49,大话西游之月光宝盒,9.0,0,1995,刘镇伟 Jeffrey Lau,暂无推荐语 +50,绿皮书,8.9,0,2018,彼得·法雷里 Peter Farrelly,暂无推荐语 +51,何以为家,9.1,0,2018,娜丁·拉巴基 Nadine Labaki,暂无推荐语 +52,闻香识女人,9.1,0,1992,马丁·布莱斯 Martin Brest,暂无推荐语 +53,大闹天宫,9.4,0,1961,万籁鸣 Laiming Wan,暂无推荐语 +54,黑客帝国,9.1,0,1999,安迪·沃卓斯基 Andy Wachowski,暂无推荐语 +55,指环王1:护戒使者,9.1,0,2001,彼得·杰克逊 Peter Jackson,暂无推荐语 +56,罗马假日,9.1,0,1953,威廉·惠勒 William Wyler,暂无推荐语 +57,教父2,9.3,0,1974,弗朗西斯·福特·科波拉 Francis Ford Coppola,暂无推荐语 +58,狮子王,9.1,0,1994,Roger Allers,暂无推荐语 +59,天堂电影院,9.2,0,1988,朱塞佩·托纳多雷 Giuseppe Tornatore,暂无推荐语 +60,饮食男女,9.2,0,1994,李安 Ang Lee,暂无推荐语 +61,辩护人,9.2,0,2013,杨宇硕 Woo-seok Yang,暂无推荐语 +62,本杰明·巴顿奇事,9.0,0,2008,大卫·芬奇 David Fincher,暂无推荐语 +63,搏击俱乐部,9.0,0,1999,大卫·芬奇 David Fincher,暂无推荐语 +64,美丽心灵,9.1,0,2001,朗·霍华德 Ron Howard,暂无推荐语 +65,穿条纹睡衣的男孩,9.2,0,2008,马克·赫尔曼 Mark Herman,暂无推荐语 +66,情书,8.9,0,1995,岩井俊二 Shunji Iwai,暂无推荐语 +67,哈利·波特与死亡圣器(下),9.0,0,2011,大卫·叶茨 David Yates,暂无推荐语 +68,两杆大烟枪,9.1,0,1998,盖·里奇 Guy Ritchie,暂无推荐语 +69,窃听风暴,9.2,0,2006,弗洛里安·亨克尔·冯·多纳斯马尔克 Florian Henckel von Donnersmarck &n... 2006,暂无推荐语 +70,音乐之声,9.1,0,1965,罗伯特·怀斯 Robert Wise,暂无推荐语 +71,功夫,8.9,0,2004,周星驰 Stephen Chow,暂无推荐语 +72,哈利·波特与阿兹卡班的囚徒,9.0,0,2004,阿方索·卡隆 Alfonso Cuarón,暂无推荐语 +73,西西里的美丽传说,8.9,0,2000,朱塞佩·托纳多雷 Giuseppe Tornatore,暂无推荐语 +74,阿凡达,8.8,0,2009,詹姆斯·卡梅隆 James Cameron,暂无推荐语 +75,看不见的客人,8.8,0,2016,奥里奥尔·保罗 Oriol Paulo,暂无推荐语 +76,拯救大兵瑞恩,9.1,0,1998,史蒂文·斯皮尔伯格 Steven Spielberg,暂无推荐语 +77,沉默的羔羊,8.9,0,1991,乔纳森·戴米 Jonathan Demme,暂无推荐语 +78,小鞋子,9.2,0,1997,马基德·马基迪 Majid Majidi,暂无推荐语 +79,布达佩斯大饭店,8.9,0,2014,韦斯·安德森 Wes Anderson,暂无推荐语 +80,蝴蝶效应,8.9,0,2004,埃里克·布雷斯 Eric Bress,暂无推荐语 +81,飞越疯人院,9.1,0,1975,米洛斯·福尔曼 Miloš Forman,暂无推荐语 +82,还有明天,9.3,0,2023,宝拉·柯特莱西 Paola Cortellesi,暂无推荐语 +83,禁闭岛,8.9,0,2010,Martin Scorsese,暂无推荐语 +84,心灵捕手,9.0,0,1997,格斯·范·桑特 Gus Van Sant,暂无推荐语 +85,致命魔术,8.9,0,2006,克里斯托弗·诺兰 Christopher Nolan,暂无推荐语 +86,低俗小说,8.9,0,1994,昆汀·塔伦蒂诺 Quentin Tarantino,暂无推荐语 +87,超脱,9.0,0,2011,托尼·凯耶 Tony Kaye,暂无推荐语 +88,哈利·波特与密室,8.9,0,2002,Chris Columbus,暂无推荐语 +89,一一,9.1,0,2000,杨德昌 Edward Yang,暂无推荐语 +90,喜剧之王,8.8,0,1999,周星驰 Stephen Chow,暂无推荐语 +91,杀人回忆,8.9,0,2003,奉俊昊 Joon-ho Bong,暂无推荐语 +92,摩登时代,9.3,0,1936,查理·卓别林 Charles Chaplin,暂无推荐语 +93,致命ID,8.9,0,2003,詹姆斯·曼高德 James Mangold,暂无推荐语 +94,春光乍泄,9.0,0,1997,王家卫 Kar Wai Wong,暂无推荐语 +95,加勒比海盗,8.8,0,2003,戈尔·维宾斯基 Gore Verbinski,暂无推荐语 +96,海豚湾,9.3,0,2009,路易·西霍尤斯 Louie Psihoyos,暂无推荐语 +97,美国往事,9.1,0,1984,赛尔乔·莱翁内 Sergio Leone,暂无推荐语 +98,红辣椒,9.0,0,2006,今敏 Satoshi Kon,暂无推荐语 +99,七宗罪,8.8,0,1995,大卫·芬奇 David Fincher,暂无推荐语 +100,唐伯虎点秋香,8.8,0,1993,李力持 Lik-Chi Lee,暂无推荐语 +101,狩猎,9.1,0,2012,托马斯·温特伯格 Thomas Vinterberg,暂无推荐语 +102,幽灵公主,8.9,0,1997,宫崎骏 Hayao Miyazaki,暂无推荐语 +103,甜蜜蜜,8.9,0,1996,陈可辛 Peter Chan,暂无推荐语 +104,寄生虫,8.8,0,2019,奉俊昊 Joon-ho Bong,暂无推荐语 +105,天书奇谭,9.2,0,1983,王树忱 Shuchen Wang,暂无推荐语 +106,蝙蝠侠:黑暗骑士崛起,8.9,0,2012,克里斯托弗·诺兰 Christopher Nolan,暂无推荐语 +107,超能陆战队,8.8,0,2014,唐·霍尔 Don Hall,暂无推荐语 +108,7号房的礼物,8.9,0,2013,李焕庆 Hwan-kyeong Lee,暂无推荐语 +109,第六感,8.9,0,1999,M·奈特·沙马兰 M. Night Shyamalan,暂无推荐语 +110,茶馆,9.5,0,1982,谢添 Tian Xie,暂无推荐语 +111,爱在黎明破晓前,8.8,0,1995,理查德·林克莱特 Richard Linklater,暂无推荐语 +112,爱在日落黄昏时,8.9,0,2004,理查德·林克莱特 Richard Linklater,暂无推荐语 +113,被嫌弃的松子的一生,8.8,0,2006,中岛哲也 Tetsuya Nakashima,暂无推荐语 +114,哈利·波特与火焰杯,8.8,0,2005,迈克·内威尔 Mike Newell,暂无推荐语 +115,头脑特工队,8.8,0,2015,彼特·道格特 Pete Docter,暂无推荐语 +116,未麻的部屋,9.1,0,1997,今敏 Satoshi Kon,暂无推荐语 +117,重庆森林,8.8,0,1994,王家卫 Kar Wai Wong,暂无推荐语 +118,借东西的小人阿莉埃蒂,8.9,0,2010,米林宏昌 Hiromasa Yonebayashi,暂无推荐语 +119,菊次郎的夏天,8.9,0,1999,北野武 Takeshi Kitano,暂无推荐语 +120,入殓师,8.9,0,2008,泷田洋二郎 Yôjirô Takita,暂无推荐语 +121,断背山,8.8,0,2005,李安 Ang Lee,暂无推荐语 +122,剪刀手爱德华,8.7,0,1990,蒂姆·波顿 Tim Burton,暂无推荐语 +123,勇敢的心,8.9,0,1995,梅尔·吉布森 Mel Gibson,暂无推荐语 +124,时空恋旅人,8.8,0,2013,理查德·柯蒂斯 Richard Curtis,暂无推荐语 +125,驯龙高手,8.8,0,2010,迪恩·德布洛斯 Dean DeBlois,暂无推荐语 +126,消失的爱人,8.7,0,2014,大卫·芬奇 David Fincher,暂无推荐语 +127,无人知晓,9.1,0,2004,是枝裕和 Hirokazu Koreeda,暂无推荐语 +128,倩女幽魂,8.8,0,1987,程小东 Siu-Tung Ching,暂无推荐语 +129,傲慢与偏见,8.7,0,2005,乔·怀特 Joe Wright,暂无推荐语 +130,新世界,8.9,0,2013,朴勋政 Hoon-jung Park,暂无推荐语 +131,花样年华,8.8,0,2000,王家卫 Kar Wai Wong,暂无推荐语 +132,玩具总动员3,8.9,0,2010,李·昂克里奇 Lee Unkrich,暂无推荐语 +133,一个叫欧维的男人决定去死,8.9,0,2015,汉内斯·赫尔姆 Hannes Holm,暂无推荐语 +134,完美的世界,9.1,0,1993,克林特·伊斯特伍德 Clint Eastwood,暂无推荐语 +135,色,戒,8.7,0,2007,李安 Ang Lee,暂无推荐语 +136,阳光灿烂的日子,8.8,0,1994,姜文 Wen Jiang,暂无推荐语 +137,怪兽电力公司,8.8,0,2001,彼特·道格特 Pete Docter,暂无推荐语 +138,小森林 夏秋篇,9.0,0,2014,森淳一 Junichi Mori,暂无推荐语 +139,天使爱美丽,8.7,0,2001,让-皮埃尔·热内 Jean-Pierre Jeunet,暂无推荐语 +140,教父3,9.0,0,1990,弗朗西斯·福特·科波拉 Francis Ford Coppola,暂无推荐语 +141,侧耳倾听,8.9,0,1995,近藤喜文 Yoshifumi Kondo,暂无推荐语 +142,哪吒闹海,9.2,0,1979,王树忱 Shuchen Wang,暂无推荐语 +143,九品芝麻官,8.8,0,1994,王晶 Jing Wong,暂无推荐语 +144,被解救的姜戈,8.8,0,2012,昆汀·塔伦蒂诺 Quentin Tarantino,暂无推荐语 +145,请以你的名字呼唤我,8.8,0,2017,卢卡·瓜达尼诺 Luca Guadagnino,暂无推荐语 +146,幸福终点站,8.8,0,2004,史蒂文·斯皮尔伯格 Steven Spielberg,暂无推荐语 +147,釜山行,8.6,0,2016,延尚昊 Sang-ho Yeon,暂无推荐语 +148,神偷奶爸,8.7,0,2010,皮艾尔·柯芬 Pierre Coffin,暂无推荐语 +149,小森林 冬春篇,9.0,0,2015,森淳一 Junichi Mori,暂无推荐语 +150,喜宴,9.0,0,1993,李安 Ang Lee,暂无推荐语 +151,萤火之森,8.8,0,2011,大森贵弘 Takahiro Omori,暂无推荐语 +152,告白,8.8,0,2010,中岛哲也 Tetsuya Nakashima,暂无推荐语 +153,玛丽和麦克斯,9.0,0,2009,亚当·艾略特 Adam Elliot,暂无推荐语 +154,七武士,9.3,0,1954,黑泽明 Akira Kurosawa,暂无推荐语 +155,头号玩家,8.6,0,2018,史蒂文·斯皮尔伯格 Steven Spielberg,暂无推荐语 +156,模仿游戏,8.8,0,2014,莫滕·泰杜姆 Morten Tyldum,暂无推荐语 +157,惊魂记,9.0,0,1960,阿尔弗雷德·希区柯克 Alfred Hitchcock,暂无推荐语 +158,大鱼,8.8,0,2003,蒂姆·波顿 Tim Burton,暂无推荐语 +159,心灵奇旅,8.7,0,2020,彼特·道格特 Pete Docter,暂无推荐语 +160,机器人之梦,9.1,0,2023,巴勃罗·贝格尔 Pablo Berger,暂无推荐语 +161,射雕英雄传之东成西就,8.7,0,1993,刘镇伟 Jeffrey Lau,暂无推荐语 +162,背靠背,脸对脸,9.5,0,1994,黄建新 Jianxin Huang,暂无推荐语 +163,血战钢锯岭,8.7,0,2016,梅尔·吉布森 Mel Gibson,暂无推荐语 +164,你的名字。,8.5,0,2016,新海诚 Makoto Shinkai,暂无推荐语 +165,我是山姆,9.0,0,2001,杰茜·尼尔森 Jessie Nelson,暂无推荐语 +166,阳光姐妹淘,8.8,0,2011,姜炯哲 Hyeong-Cheol Kang,暂无推荐语 +167,恐怖直播,8.7,0,2013,金秉祐 Byeong-woo Kim,暂无推荐语 +168,黑客帝国3:矩阵革命,8.8,0,2003,拉娜·沃卓斯基 Lana Wachowski,暂无推荐语 +169,末路狂花,9.0,0,1991,雷德利·斯科特 Ridley Scott,暂无推荐语 +170,小丑,8.7,0,2019,托德·菲利普斯 Todd Phillips,暂无推荐语 +171,三块广告牌,8.7,0,2017,马丁·麦克唐纳 Martin McDonagh,暂无推荐语 +172,谍影重重3,8.9,0,2007,保罗·格林格拉斯 Paul Greengrass,暂无推荐语 +173,高山下的花环,9.5,0,1984,谢晋 Jin Xie,暂无推荐语 +174,电锯惊魂,8.7,0,2004,詹姆斯·温 James Wan,暂无推荐语 +175,无间道2,8.8,0,2003,刘伟强 Andrew Lau,暂无推荐语 +176,达拉斯买家俱乐部,8.8,0,2013,让-马克·瓦雷 Jean-Marc Vallée,暂无推荐语 +177,疯狂原始人,8.7,0,2013,科克·德·米科 Kirk De Micco,暂无推荐语 +178,绿里奇迹,8.9,0,1999,弗兰克·德拉邦特 Frank Darabont,暂无推荐语 +179,爱在午夜降临前,8.9,0,2013,理查德·林克莱特 Richard Linklater,暂无推荐语 +180,疯狂的石头,8.6,0,2006,宁浩 Hao Ning,暂无推荐语 +181,雨中曲,9.1,0,1952,斯坦利·多南 Stanley Donen,暂无推荐语 +182,2001太空漫游,8.9,0,1968,斯坦利·库布里克 Stanley Kubrick,暂无推荐语 +183,海街日记,8.8,0,2015,是枝裕和 Hirokazu Koreeda,暂无推荐语 +184,风之谷,8.9,0,1984,宫崎骏 Hayao Miyazaki,暂无推荐语 +185,上帝之城,9.0,0,2002,费尔南多·梅里尔斯 Fernando Meirelles,暂无推荐语 +186,心迷宫,8.7,0,2014,忻钰坤 Yukun Xin,暂无推荐语 +187,英雄本色,8.6,0,1986,吴宇森 John Woo,暂无推荐语 +188,记忆碎片,8.7,0,2000,克里斯托弗·诺兰 Christopher Nolan,暂无推荐语 +189,纵横四海,8.8,0,1991,吴宇森 John Woo,暂无推荐语 +190,无敌破坏王,8.7,0,2012,瑞奇·莫尔 Rich Moore,暂无推荐语 +191,卢旺达饭店,8.9,0,2004,特瑞·乔治 Terry George,暂无推荐语 +192,东京教父,9.0,0,2003,今敏 Satoshi Kon,暂无推荐语 +193,恐怖游轮,8.5,0,2009,克里斯托弗·史密斯 Christopher Smith,暂无推荐语 +194,小偷家族,8.7,0,2018,是枝裕和 Hirokazu Koreeda,暂无推荐语 +195,牯岭街少年杀人事件,8.9,0,1991,杨德昌 Edward Yang,暂无推荐语 +196,魔女宅急便,8.7,0,1989,宫崎骏 Hayao Miyazaki,暂无推荐语 +197,冰川时代,8.7,0,2002,卡洛斯·沙尔丹哈 Carlos Saldanha,暂无推荐语 +198,芙蓉镇,9.3,0,1987,谢晋 Jin Xie,暂无推荐语 +199,忠犬八公物语,9.2,0,1987,神山征二郎 Seijirô Kôyama,暂无推荐语 +200,岁月神偷,8.7,0,2010,罗启锐 Alex Law,暂无推荐语 +201,遗愿清单,8.7,0,2007,罗伯·莱纳 Rob Reiner,暂无推荐语 +202,荒蛮故事,8.7,0,2014,达米安·斯兹弗隆 Damián Szifron,暂无推荐语 +203,大佛普拉斯,8.7,0,2017,黄信尧 Hsin-yao Huang,暂无推荐语 +204,源代码,8.6,0,2011,邓肯·琼斯 Duncan Jones,暂无推荐语 +205,花束般的恋爱,8.6,0,2021,土井裕泰 Nobuhiro Doi,暂无推荐语 +206,白日梦想家,8.6,0,2013,本·斯蒂勒 Ben Stiller,暂无推荐语 +207,疯狂的麦克斯4:狂暴之路,8.7,0,2015,乔治·米勒 George Miller,暂无推荐语 +208,爱乐之城,8.4,0,2016,达米恩·查泽雷 Damien Chazelle,暂无推荐语 +209,可可西里,8.9,0,2004,陆川 Chuan Lu,暂无推荐语 +210,你看起来好像很好吃,8.9,0,2010,藤森雅也 Masaya Fujimori,暂无推荐语 +211,贫民窟的百万富翁,8.6,0,2008,丹尼·鲍尔 Danny Boyle,暂无推荐语 +212,波西米亚狂想曲,8.6,0,2018,布莱恩·辛格 Bryan Singer,暂无推荐语 +213,城市之光,9.3,0,1931,查理·卓别林 Charles Chaplin,暂无推荐语 +214,爆裂鼓手,8.6,0,2014,达米恩·查泽雷 Damien Chazelle,暂无推荐语 +215,青蛇,8.6,0,1993,徐克 Hark Tsui,暂无推荐语 +216,东邪西毒,8.6,0,1994,王家卫 Kar Wai Wong,暂无推荐语 +217,哈利·波特与死亡圣器(上),8.6,0,2010,大卫·叶茨 David Yates,暂无推荐语 +218,无耻混蛋,8.7,0,2009,昆汀·塔伦蒂诺 Quentin Tarantino,暂无推荐语 +219,终结者2:审判日,8.8,0,1991,詹姆斯·卡梅隆 James Cameron,暂无推荐语 +220,大红灯笼高高挂,8.8,0,1991,张艺谋 Yimou Zhang,暂无推荐语 +221,黑天鹅,8.6,0,2010,达伦·阿罗诺夫斯基 Darren Aronofsky,暂无推荐语 +222,新龙门客栈,8.7,0,1992,李惠民 Raymond Lee,暂无推荐语 +223,初恋这件小事,8.5,0,2010,普特鹏·普罗萨卡·那·萨克那卡林 Puttipong Promsaka Na Sakolnakorn,暂无推荐语 +224,人工智能,8.7,0,2001,史蒂文·斯皮尔伯格 Steven Spielberg,暂无推荐语 +225,千钧一发,8.8,0,1997,安德鲁·尼科尔 Andrew Niccol,暂无推荐语 +226,崖上的波妞,8.6,0,2008,宫崎骏 Hayao Miyazaki,暂无推荐语 +227,雨人,8.7,0,1988,巴瑞·莱文森 Barry Levinson,暂无推荐语 +228,虎口脱险,8.9,0,1966,杰拉尔·乌里 Gérard Oury,暂无推荐语 +229,哈利·波特与凤凰社,8.6,0,2007,大卫·叶茨 David Yates,暂无推荐语 +230,彗星来的那一夜,8.6,0,2013,詹姆斯·沃德·布柯特 James Ward Byrkit,暂无推荐语 +231,罗生门,8.8,0,1950,黑泽明 Akira Kurosawa,暂无推荐语 +232,海边的曼彻斯特,8.6,0,2016,肯尼斯·罗纳根 Kenneth Lonergan,暂无推荐语 +233,恋恋笔记本,8.5,0,2004,尼克·卡索维茨 Nick Cassavetes,暂无推荐语 +234,真爱至上,8.5,0,2003,理查德·柯蒂斯 Richard Curtis,暂无推荐语 +235,火星救援,8.5,0,2015,雷德利·斯科特 Ridley Scott,暂无推荐语 +236,黑客帝国2:重装上阵,8.7,0,2003,拉娜·沃卓斯基 Lana Wachowski,暂无推荐语 +237,冰雪奇缘,8.5,0,2013,克里斯·巴克 Chris Buck,暂无推荐语 +238,步履不停,8.8,0,2008,是枝裕和 Hirokazu Koreeda,暂无推荐语 +239,奇迹男孩,8.6,0,2017,斯蒂芬·卓博斯基 Stephen Chbosky,暂无推荐语 +240,千年女优,8.8,0,2001,今敏 Satoshi Kon,暂无推荐语 +241,战争之王,8.7,0,2005,安德鲁·尼科尔 Andrew Niccol,暂无推荐语 +242,谍影重重2,8.7,0,2004,保罗·格林格拉斯 Paul Greengrass,暂无推荐语 +243,蜘蛛侠:平行宇宙,8.6,0,2018,鲍勃·佩尔西凯蒂 Bob Persichetti,暂无推荐语 +244,攻壳机动队,9.0,0,1995,押井守 Mamoru Oshii,暂无推荐语 +245,血钻,8.7,0,2006,爱德华·兹威克 Edward Zwick,暂无推荐语 +246,小姐,8.5,0,2016,朴赞郁 Chan-wook Park,暂无推荐语 +247,隐藏人物,8.9,0,2016,特奥多尔·梅尔菲 Theodore Melfi,暂无推荐语 +248,魂断蓝桥,8.8,0,1940,茂文·勒鲁瓦 Mervyn LeRoy,暂无推荐语 +249,血观音,8.6,0,2017,杨雅喆 Ya-che Yang,暂无推荐语 +250,房间,8.7,0,2015,伦尼·阿伯拉罕森 Lenny Abrahamson,暂无推荐语 diff --git a/project/折线图.png b/project/折线图.png new file mode 100644 index 0000000..1169199 Binary files /dev/null and b/project/折线图.png differ diff --git a/project/柱状图.png b/project/柱状图.png new file mode 100644 index 0000000..fd6eb05 Binary files /dev/null and b/project/柱状图.png differ diff --git a/project/饼图.png b/project/饼图.png new file mode 100644 index 0000000..5c24149 Binary files /dev/null and b/project/饼图.png differ