java jsoup 网络爬虫 学习例子(二) 只抓取豆瓣电影5星(力荐)电影名称

Java代码   收藏代码
  1. package com.iteye.injavawetrust.review;  
  2.   
  3. /** 
  4.  *  
  5.  * @author InJavausWeTrust 
  6.  * 
  7.  */  
  8. public enum Star {  
  9.   
  10.     one("很差"), two("较差"), three("还行"), four("推荐"), five("力荐");  
  11.   
  12.     private String star;  
  13.   
  14.     private Star(String star) {  
  15.         this.star = star;  
  16.     }  
  17.   
  18.     public String getStar() {  
  19.         return star;  
  20.     }  
  21.   
  22. }  
  23.   
  24.   
  25. package com.iteye.injavawetrust.review;  
  26.   
  27. /** 
  28.  *  
  29.  * @author InJavaWeTrust 
  30.  * 
  31.  */  
  32. public class DouBanReview {  
  33.   
  34.     public static void main(String[] args) {  
  35.         JsoupUtil ju = JsoupUtil.getInstance();  
  36.         ju.getDoubanReview();  
  37.     }  
  38.   
  39. }  
  40.   
  41.   
  42.   
  43. package com.iteye.injavawetrust.review;  
  44.   
  45. /** 
  46.  *  
  47.  * @author InJavaWeTrust 
  48.  * 
  49.  */  
  50. public class Constants {  
  51.   
  52.     /** 
  53.      * 豆瓣最受欢迎的影评URL 
  54.      */  
  55.     public static final String URL = "http://movie.douban.com/review/best/";  
  56.     /** 
  57.      * 每页显示记录条数 
  58.      */  
  59.     public static final int NUM = 10;  
  60.   
  61.     /** 
  62.      * 拼接分页 
  63.      */  
  64.     public static final String START = "?start=";  
  65.   
  66. }  
  67.   
  68.   
  69.   
  70. package com.iteye.injavawetrust.review;  
  71.   
  72. import java.io.File;  
  73. import java.io.FileNotFoundException;  
  74. import java.io.FileWriter;  
  75. import java.io.IOException;  
  76. import java.io.Writer;  
  77. import java.util.Iterator;  
  78.   
  79. import org.jsoup.Connection;  
  80. import org.jsoup.Jsoup;  
  81. import org.jsoup.nodes.Document;  
  82. import org.jsoup.nodes.Element;  
  83. import org.jsoup.select.Elements;  
  84.   
  85. /** 
  86.  *  
  87.  * @author InJavaWeTrust 
  88.  * 
  89.  */  
  90. public class JsoupUtil {  
  91.   
  92.     private JsoupUtil() {  
  93.   
  94.     }  
  95.   
  96.     private static final JsoupUtil instance = new JsoupUtil();  
  97.   
  98.     public static JsoupUtil getInstance() {  
  99.         return instance;  
  100.     }  
  101.       
  102.     /** 
  103.      * 将电影名称和评论写入文件 
  104.      * @param name 电影名称 
  105.      * @param star 评论 
  106.      */  
  107.     public void writeFile(String name, String star){  
  108.         File file = new File("E:\\douban\\fiveStarReview.txt");  
  109.         Writer writer = null;  
  110.         try {  
  111.             writer = new FileWriter(file, true);  
  112.             writer.write(star + "   " + name + "\r\n");  
  113.             writer.flush();  
  114.         } catch (FileNotFoundException e) {  
  115.             e.printStackTrace();  
  116.         } catch (IOException e) {  
  117.             e.printStackTrace();  
  118.         } finally {  
  119.             if(null != writer){  
  120.                 try {  
  121.                     writer.close();  
  122.                 } catch (IOException e) {  
  123.                     e.printStackTrace();  
  124.                 }  
  125.             }  
  126.         }  
  127.     }  
  128.       
  129.     /** 
  130.      * 只抓取5星(力荐)电影名称 
  131.      */  
  132.     public void getDoubanReview(){  
  133.         try {  
  134.             //只得到1-5页数据  
  135.             for(int i = 0; i < 5; i++){  
  136.                 String url = Constants.URL + Constants.START + String.valueOf(i * Constants.NUM);  
  137.                 System.out.println(url);  
  138.                 Connection connection = Jsoup.connect(url);  
  139.                 Document document = connection.get();  
  140.                 Elements ul = document.select("ul"); // 得到ul标签  
  141.                 Iterator ulIter = ul.iterator();  
  142.                 while (ulIter.hasNext()) {  
  143.                     Element element = ulIter.next();  
  144.                     Elements eleLi = element.select("li.clst*"); // 得到ul里的li.clst*标签  
  145.                     Iterator liIter = eleLi.iterator();  
  146.                     while (liIter.hasNext()) {  
  147.                         Element liElement = liIter.next();  
  148.                         Elements eleSpan = liElement.select("span.pl*"); // 得到ul里的li.clst*里span.pl*的标签  
  149.                         Elements eleHref = eleSpan.select("a[href]");  
  150.                         String name = eleHref.text().substring(eleHref.text().indexOf("《"));  
  151.                         Elements eleStar = eleSpan.select("span[title]");  
  152.                         String star = eleStar.attr("title");  
  153.                         //抓取5星(力荐)电影名称  
  154.                         if(Star.five.getStar().equals(star)) {  
  155.                             System.out.println(name + " " + star);  
  156.                             JsoupUtil.getInstance().writeFile(name, star); //写入文件  
  157.                         }  
  158.                     }  
  159.                 }  
  160.             }  
  161.               
  162.   
  163.         } catch (IOException e) {  
  164.             e.printStackTrace();  
  165.         }  
  166.     }  
  167.       
  168. }  

 

 

运行结果:

 

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
《太阳的后裔》 力荐
《浴血重生》 力荐
《奶酪陷阱》 力荐
《卧虎藏龙》 力荐
《太阳的后裔》 力荐

你可能感兴趣的:(Jsoup,网络爬虫)