您的位置:首页 > 理论基础 > 计算机网络

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

2016-04-19 16:35 846 查看
Java代码


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

《太阳的后裔》 力荐

《浴血重生》 力荐

《奶酪陷阱》 力荐

《卧虎藏龙》 力荐

《太阳的后裔》 力荐
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: