java jsoup jsoup解析html 网络爬虫 学习例子(一) 抓取豆电影名称+推荐星级
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<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");
System.out.println(name + " " + star);
JsoupUtil.getInstance().writeFile(name, star); //写入文件
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果:
豆瓣最受欢迎的影评
《太阳的后裔》 力荐
《太阳的后裔》 推荐
《少帅》 还行
《银翼杀手》 力荐
《太阳的后裔》 推荐
《因为爱情有幸福》 力荐
《维京传奇 第三季》 力荐
《卡罗尔》 力荐
《太阳的后裔》 力荐
《因为爱情有幸福》 推荐
豆瓣最受欢迎的影评
《太阳的后裔》 力荐
《火影忍者剧场版:博人传》 力荐
《夜班经理》 推荐
《卧虎藏龙:青冥宝剑》 很差
《一一》 推荐
《后宫·甄嬛传》 力荐
《太阳的后裔》 推荐
《美人鱼》 还行
《奶酪陷阱》 推荐
《太阳的后裔》 力荐
豆瓣最受欢迎的影评
《太阳的后裔》 力荐
《重庆森林》 力荐
《请和这个没用的我谈恋爱》 较差
《高跟鞋先生》 较差
《老炮儿》 还行
《浴血重生》 力荐
《夜班经理》 力荐
《特朗勃》 推荐
《没有宇宙我们无法生存》 力荐
《女巫》 力荐
豆瓣最受欢迎的影评
《房间》 推荐
《邮差》 力荐
《西游记之孙悟空三打白骨精》 推荐
《特鲁曼》 力荐
《上瘾》 力荐
《喜剧之王》 力荐
《大城小贼》 推荐
《女医明妃传》 还行
《霹雳囧花》 还行
《詹姆斯·伯罗斯特辑》 力荐
豆瓣最受欢迎的影评
《太阳的后裔》 力荐
《因为爱情有幸福》 推荐
《澳门风云3》 还行
《托马斯和朋友们:多多岛之迷失宝藏》 还行
《浴血重生》 力荐
《示铃录》 还行
《奶酪陷阱》 力荐
《请和这个没用的我谈恋爱》 推荐
《卧虎藏龙》 力荐
《恶棍天使》 还行
文件截图