java jsoup 网络爬虫 学习例子(一) 抓取豆瓣电影名称+推荐星级

package com.iteye.injavawetrust.jsoup;

/**
 * 
 * @author InJavaWeTrust
 *
 */
public class DouBanReview {

	public static void main(String[] args) {
		JsoupUtil ju = JsoupUtil.getInstance();
		ju.getDoubanReview();
	}

}


package com.iteye.injavawetrust.jsoup;

/**
 * 
 * @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.jsoup;

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\\review.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();
				}
			}
		}
	}
	
	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 ulIter = ul.iterator();
				while (ulIter.hasNext()) {
					Element element = ulIter.next();
					Elements eleLi = element.select("li.clst*"); // 得到ul里的li.clst*标签
					Iterator 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");
						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
《太阳的后裔》 力荐
《因为爱情有幸福》 推荐
《澳门风云3》 还行
《托马斯和朋友们:多多岛之迷失宝藏》 还行
《浴血重生》 力荐
《示铃录》 还行
《奶酪陷阱》 力荐
《请和这个没用的我谈恋爱》 推荐
《卧虎藏龙》 力荐
《恶棍天使》 还行

 

文件截图

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