爬虫简单思想:请求URL--->下载HTML内容--->解析内容--->保存结果
对于生产级的爬虫项目来说需要处理的问题远不止这些,比如在项目中会遇到反爬虫、性能、登录、加密、异步请求问题、请求失败、代码健壮等这些问题都需要解决
HtmlCleaner包简介
HtmlCleaner是一个开源的Java语言的Html文档解析器。HtmlCleaner能够重新整理HTML文档的每个元素并生成结构良好(Well-Formed)的 HTML 文档。
默认它遵循的规则是类似于大部份web浏览器为创文档对象模型所使用的规则。然而,用户可以提供自定义tag和规则组来进行过滤和匹配。它被设计的小,快速,灵活而且独立。HtmlCleaner也可用在Java代码中,当命令行工具或Ant任务。 解析后编程轻量级文档对象,能够很容易的被转换到DOM或者JDom标准文档,或者通过各种方式(压缩,打印)连续输出XML。
简单来说HtmlCleaner可以把我们下载的Html内容,转换成DOM对象,并且该Jar包提供了XPATH解析的API,帮助我们通过XPATH解析采集到的网页内容。
<dependency>
<groupId>net.sourceforge.htmlcleaner</groupId>
<artifactId>htmlcleaner</artifactId>
<version>2.22</version>
</dependency>
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
public class DownloadHtmlTool {
/**
* 下载指定URL的Html内容
*
* @param url url连接
* @return 返回html页面内容
* @throws Exception
*/
public String getHtml(String url) throws Exception {
URL u = new URL(url);
URLConnection conn = u.openConnection();
InputStream in = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line = null;
StringBuffer html = new StringBuffer();
while ((line = br.readLine()) != null) {
html.append(line);
}
in.close();
br.close();
return html.toString();
}
}
获取 dom元素
/**
* 爬虫解析方法
*
* @param url 待采集的URL
* @return 返回解析的内容
* @throws Exception
*/
public void getSpiderData(String url) throws Exception {
//1.下载html
String html = new DownloadHtmlTool().getHtml("https://blog.youkuaiyun.com/feicongcong/article/list/1");
HtmlCleaner hc = new HtmlCleaner();
//2.把html转换成dom对象
TagNode tn = hc.clean(html);
//3.通过xpath解析dom对象
Object[] blogTitleArray=tn.evaluateXPath("//h1[@class='title-article']/text()");
Object[] publishTimeArray=tn.evaluateXPath("//span[@class='time']/text()");
Object[] readCountArray=tn.evaluateXPath("//span[@class='read-count']/text()");
}