htmlunit 抓取网页(JavaHTML4支持代理服务器(5)支持自动的Cookies管理等 )
优采云 发布时间: 2022-03-08 17:00htmlunit 抓取网页(JavaHTML4支持代理服务器(5)支持自动的Cookies管理等
)
(4)支持代理服务器
(5)支持自动cookie管理等
Java爬虫开发中应用最广泛的网页获取技术。它具有一流的速度和性能。它在功能支持方面相对较低。不支持JS脚本执行、CSS解析渲染等准浏览器功能。推荐用于无需解析脚本和 CSS 即可获取网页的快速场景。
示例代码如下:
package cn.ysh.studio.crawler.httpclient;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
/**
* 基于HtmlClient抓取网页内容
*
* @author www.yshjava.cn
*/
public class HttpClientTest {
public static void main(String[] args)throws Exception{
//目标页面
String url ="http://www.jjwxc.net/";
//创建一个默认的HttpClient
HttpClient httpclient =new DefaultHttpClient();
try{
//以get方式请求网页http://www.yshjava.cn
HttpGet httpget =new HttpGet(url);
//打印请求地址
System.out.println("executing request "+ httpget.getURI());
//创建响应处理器处理服务器响应内容
ResponseHandler responseHandler = new BasicResponseHandler();
//执行请求并获取结果
String responseBody = httpclient.execute(httpget, responseHandler);
System.out.println("----------------------------------------");
String htmlStr=null;
if(responseBody != null) {
// htmlStr=new String(EntityUtils.toString(responseBody));
// htmlStr=new String(htmlStr.getBytes("ISO-8859-1"), "gbk"); // 读取乱码解决
responseBody=new String(responseBody.getBytes("ISO-8859-1"), "gb2312");
}
System.out.println(responseBody);
System.out.println("----------------------------------------");
}finally{//关闭连接管理器
httpclient.getConnectionManager().shutdown();
}
}
}
汤
jsoup 是一个Java HTML 解析器,可以直接解析一个URL 地址和HTML 文本内容。它提供了一个非常省力的 API,用于通过 DOM、CSS 和类似 jQuery 的操作方法获取和操作数据。
网页获取解析速度快,推荐。
主要功能如下:
1. 从 URL、文件或字符串解析 HTML;
2. 使用 DOM 或 CSS 选择器来查找和检索数据;
3.可以操作HTML元素、属性、文本;
示例代码如下:
package cn.ysh.studio.crawler.jsoup;
import java.io.IOException;
import org.jsoup.Jsoup;
/**
* 基于Jsoup抓取网页内容
* @author www.yshjava.cn
*/
public class JsoupTest {
public static void main(String[] args)throws IOException{
//目标页面
String url ="http://www.jjwxc.net";
//使用Jsoup连接目标页面,并执行请求,获取服务器响应内容
String html =Jsoup.connect(url).execute().body();
//打印页面内容
System.out.println(html);
}
}
HtmlUnit
htmlunit 是一个开源的java页面分析工具。阅读完页面后,可以有效地使用htmlunit分析页面上的内容。该项目可以模拟浏览器的操作,称为java浏览器的开源实现。这个没有界面的浏览器运行速度非常快。使用 Rhinojs 引擎。模拟js运行。
网页获取解析速度快,性能更好。推荐用于需要解析网页脚本的应用场景。
示例代码如下:
package cn.ysh.studio.crawler.htmlunit;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.Page;
import com.gargoylesoftware.htmlunit.WebClient;
/**
* 基于HtmlUnit抓取网页内容
*
* @author www.yshjava.cn
*/
public class HtmlUnitSpider {
public static void main(String[] s) throws Exception {
// 目标网页
String url = "http://www.jjwxc.net/";
// 模拟特定浏览器FIREFOX_3
WebClient spider = new WebClient(BrowserVersion.FIREFOX_3);
// 获取目标网页
Page page = spider.getPage(url);
// 打印网页内容
System.out.println(page.getWebResponse().getContentAsString());
// 关闭所有窗口
// spider.closeAllWindows();
spider.close();
}
}
瓦提
硒
Selenium 也是一个用于 Web 应用程序测试的工具。 Selenium 测试直接在浏览器中运行,就像真正的用户一样。支持的浏览器包括 IE、Mozilla Firefox、Mozilla Suite 等。该工具的主要功能包括: 测试与浏览器的兼容性——测试您的应用程序是否在不同的浏览器和操作系统上运行良好。测试系统功能 - 创建回归测试以验证软件功能和用户需求。支持动作的自动记录和自动生成。 Net、Java、Perl 和其他不同语言的测试脚本。 Selenium 是 ThoughtWorks 专门为 Web 应用编写的验收测试工具。
网页抓取速度慢,对于爬虫来说不是一个好的选择。
示例代码如下:
package cn.ysh.studio.crawler.selenium;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
/**
* 基于HtmlDriver抓取网页内容
*
* @author www.yshjava.cn
*/
public class HtmlDriverTest {
public static void main(String[] s) {
// 目标网页
String url = "http://www.jjwxc.net/";
HtmlUnitDriver driver = new HtmlUnitDriver();
try {
// 禁用JS脚本功能
driver.setJavascriptEnabled(false);
// 打开目标网页
driver.get(url);
// 获取当前网页源码
String html = driver.getPageSource();
// 打印网页源码
System.out.println(html);
} catch (Exception e) {
// 打印堆栈信息
e.printStackTrace();
} finally {
try {
// 关闭并退出
driver.close();
driver.quit();
} catch (Exception e) {
}
}
}
}
网络规范
具有支持脚本执行和 CSS 呈现的界面的开源 Java 浏览器。平均速度。
示例代码如下:
package cn.ysh.studio.crawler.webspec;
import org.watij.webspec.dsl.WebSpec;
/**
* 基于WebSpec抓取网页内容
*
* @author www.yshjava.cn
*/
public class WebspecTest {
public static void main(String[] s){
//目标网页
String url ="http://www.jjwxc.net/";
//实例化浏览器对象
WebSpec spec =new WebSpec().mozilla();
//隐藏浏览器窗体
spec.hide();
//打开目标页面
spec.open(url);
//打印网页源码
System.out.println(spec.source());
//关闭所有窗口
spec.closeAll();
}
}