class="java" name="code">package com.iteye.injavawetrust.review; /** * * @author InJavausWeTrust * */ public enum Star { one("很差"), two("较差"), three("还行"), four("推荐"), five("力荐"); private String star; private Star(String star) { this.star = star; } public String getStar() { return star; } } package com.iteye.injavawetrust.review; /** * * @author InJavaWeTrust * */ public class DouBanReview { public static void main(String[] args) { JsoupUtil ju = JsoupUtil.getInstance(); ju.getDoubanReview(); } } package com.iteye.injavawetrust.review; /** * * @author InJavaWeTrust * */ public class Constants { /** * 豆瓣最受欢迎的影评URL */ public static final String URL = "http://movie.douban.com/review/best/"; /** * 每页显示记录条数 */ public static final int NUM = 10; /** * 拼接分页 */ public static final String START = "?start="; } package com.iteye.injavawetrust.review; import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.util.Iterator; import org.jsoup.Connection; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; /** * * @author InJavaWeTrust * */ public class JsoupUtil { private JsoupUtil() { } private static final JsoupUtil instance = new JsoupUtil(); public static JsoupUtil getInstance() { return instance; } /** * 将电影名称和评论写入文件 * @param name 电影名称 * @param star 评论 */ public void writeFile(String name, String star){ File file = new File("E:\\douban\\fiveStarReview.txt"); Writer writer = null; try { writer = new FileWriter(file, true); writer.write(star + " " + name + "\r\n"); writer.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(null != writer){ try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 只抓取5星(力荐)电影名称 */ public void getDoubanReview(){ try { //只得到1-5页数据 for(int i = 0; i < 5; i++){ String url = Constants.URL + Constants.START + String.valueOf(i * Constants.NUM); System.out.println(url); Connection connection = Jsoup.connect(url); Document document = connection.get(); Elements ul = document.select("ul"); // 得到ul标签 Iterator<Element> ulIter = ul.iterator(); while (ulIter.hasNext()) { Element element = ulIter.next(); Elements eleLi = element.select("li.clst*"); // 得到ul里的li.clst*标签 Iterator<Element> liIter = eleLi.iterator(); while (liIter.hasNext()) { Element liElement = liIter.next(); Elements eleSpan = liElement.select("span.pl*"); // 得到ul里的li.clst*里span.pl*的标签 Elements eleHref = eleSpan.select("a[href]"); String name = eleHref.text().substring(eleHref.text().indexOf("《")); Elements eleStar = eleSpan.select("span[title]"); String star = eleStar.attr("title"); //抓取5星(力荐)电影名称 if(Star.five.getStar().equals(star)) { System.out.println(name + " " + star); JsoupUtil.getInstance().writeFile(name, star); //写入文件 } } } } } catch (IOException e) { e.printStackTrace(); } } }
?
?
运行结果:
?
http://movie.douban.com/review/best/?start=0
《太阳的后裔》 力荐
《银翼杀手》 力荐
《维京传奇 第三季》 力荐
《因为爱情有幸福》 力荐
《卡罗尔》 力荐
《火影忍者剧场版:博人传》 力荐
http://movie.douban.com/review/best/?start=10
《太阳的后裔》 力荐
《后宫·甄嬛传》 力荐
《怪物之子》 力荐
《太阳的后裔》 力荐
http://movie.douban.com/review/best/?start=20
《太阳的后裔》 力荐
《重庆森林》 力荐
《浴血重生》 力荐
《夜班经理》 力荐
《没有宇宙我们无法生存》 力荐
《女巫》 力荐
http://movie.douban.com/review/best/?start=30
《邮差》 力荐
《特鲁曼》 力荐
《上瘾》 力荐
《喜剧之王》 力荐
《詹姆斯·伯罗斯特辑》 力荐
http://movie.douban.com/review/best/?start=40
《太阳的后裔》 力荐
《浴血重生》 力荐
《奶酪陷阱》 力荐
《卧虎藏龙》 力荐
《太阳的后裔》 力荐
?
文件截图:
?
?