(一)Jsoup
Jsoup是一个Java开源HTML剖析器,可直接剖析某个URL地点、HTML文本内容。经由过程Dom或Css选择器来查找、掏出数据,完成爬虫。
maven坐标
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.2</version>
</dependency>
演示Demo
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import java.io.IOException;
public class JsoupDemo
{
public static void main( String[] args ) throws IOException {
Document doc = Jsoup.connect("http://www.baidu.com").get();
System.out.println("title:"+doc.title());
Elements es = doc.select("area");
//Elements es = doc.getElementByTag("area");
System.out.println("百度图片点击途径:"+es.attr("href"));
}
}
(二 )PhantomJs
PhantomJS是一个可编程的无头浏览器。经由过程PhantomJs能够收集Ajax天生的内容。
无头浏览器:一个完全的浏览器内核,包含js剖析引擎,衬着引擎,要求处置惩罚等,然则不包含显现和用户交互页面的浏览器。
步骤:
- 下载安装,设置环境变量
- 编写并实行js剧本
演示Demo
var page = require("webpage").create(), //网页对象
system = require("system"), //体系对象
address,t;
phantom.outputEncoding='gbk'; //设置输出编码
//phantom.outputEncoding='utf-8'; //设置输出编码
var arr = system.args;
//推断参数是不是传入
if(arr.length==1){
console.log("请输入待要求url");
phantom.exit(0);
} else {
address = arr[1];
console.log("最先接见页面:"+address);
t = Date.now();
//接见页面
page.open(address,function(status){
if(status !== 'success'){
console.log('page faild to load.');
phantom.exit();
} else {
t = Date.now() - t;
console.log("页面接见完毕:耗时:"+t+"ms");
//引入jquery
page.includeJs("http://code.jquery.com/jquery-2.2.4.min.js",function(){
var result = (page.evaluate(function(){
return $('area').attr('href');
}));
console.log("图片点击途径:"+result);
phantom.exit();
})
}
})
}
假定文件名为 c:/baidu.js;在命令行中实行 phantomjs c:/baidu.js http://www.baidu.com
java 挪用Phantomjs
演示Demo
import java.io.*;
public class PhantomJsDemo
{
public static void main( String[] args ) throws IOException {
Runtime rn = Runtime.getRuntime();
String url = "http://www.baidu.com"
Process process = rn.exec("phantomjs c:/baidu.js " + url);
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
StringBuffer sb = new StringBuffer();
String temp = "";
while((temp=br.readLine())!=null){
sb.append(temp);
}
System.out.println(sb.toString());
}
}