Java爬虫基于Jsoup做个简单实现
jsoup简介:
jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。如果你想要进行简单爬虫实现那它是再好不过了。
jsoup中文API文档:http://www.open-open.com/jsoup/
第一步:
确定你想要爬取那个网站的内容。这里以电影天堂为例子!
第二步:
新建maven项目或者java project都可以,引入jsoup依赖,我这里是用的maven项目。依赖如下:
<!-- jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.8.3</version>
</dependency>
第三步:
打开浏览器调试模式分析页面标签及内容所在位置
从以上图中可以依次看出 电影列表就在类名为 co_content8的div中,然后通过以下代码来解析出我们需要的内容
我这里用的是单元测试进行的,你们随意。
@Test
//支持分页爬取
public void pachong3() throws IOException {
//设置需要下载多少页
int page=10;//先爬取10页的内容
int result=0;
for (int i = 1; i <= page; i++) {
result=pachong_page("http://www.dytt8.net/html/gndy/dyzz/list_23_" + i + ".html");
}
System.out.println("爬取结束!一共爬取内容为:"+result*page+"条!");
}
public int pachong_page(String url) throws IOException {
//String url="http://www.ygdy8.net/html/gndy/dyzz/list_23_1.html";
Document doc = null;
try {
doc = Jsoup.connect(url).userAgent("Mozilla").get();//模拟火狐浏览器
} catch (IOException e) {
e.printStackTrace();
}
//这里根据在网页中分析的类选择器来获取电影列表所在的节点
Elements div = doc.getElementsByClass("co_content8");
//获取电影列表
Elements table = div.select("table");//查找table标签
//获取电影列表总数
int result=table.size();
//System.out.println("电影列表数为:"+result);
for (Element tb : table) {
try {
Thread.sleep(1000);//让线程操作不要太快 1秒一次 时间自己设置,主要是模拟人在点击
} catch (InterruptedException e) {
e.printStackTrace();
}
//获取所有电影详情的链接所在的节点
Elements tr = tb.select("tr");
//System.out.println(tr.size());
//获取电影列表链接和标题
String videos=tr.get(1).select("a").attr("abs:href");
System.out.println(tr.get(1).select("a").attr("abs:href")+"\t"+tr.get(1).select("a").text());
//这里要跳过这个首页页面 否则会抛出异常
if ("http://www.dytt8.net/html/gndy/jddy/index.html".equals(videos))continue;
//进如电影列表详情页面
doc = Jsoup.connect(videos).userAgent("Mozilla").get();
//获取到电影详情页面所在的节点
Element div1 = doc.getElementById("Zoom");
//获取电影描述
//String des=div1.select("p").text();
//System.out.println(div1.select("p").text());
//获取封面图地址
Elements select = div1.select("img[src$=.jpg]");
String imgUrl=select.get(0).attr("abs:src");
System.out.println(imgUrl);
//获取下载地址
System.out.println(div1.select("td").text());
//存入数据库
try {
Db.use().insert(
Entity.create("movie")
.set("type", "最新电影")
.set("title", tr.get(1).select("a").text())
.set("imagesUrl", imgUrl)
.set("videoUrl", div1.select("td").text())
.set("date", new Date())
.set("describe", div1.select("p").text())
);
} catch (SQLException e) {
e.printStackTrace();
}
}
return result;
}
最终的测试结果:
sql日志
添加到数据库中的结果如下图:
因为我平时没有写博文的习惯但由于自己记性又不好所以还是记录一下自己在爬虫中的笔记和体会,有爬虫兴趣这方面的朋友不妨多研究研究,这里只是一个简单的爬虫列子,写的不好的地方请大家多指点。最后感谢民间高手的技术分享才能让我们在技术的路上永无止境!