爬虫

本文深入探讨了爬虫技术的基本原理,包括如何请求URL、下载HTML内容、解析内容及保存结果。特别介绍了HtmlCleaner包,这是一个强大的Java HTML文档解析器,能将杂乱的HTML转换为结构良好的文档,并提供了XPATH解析API,便于高效地提取所需信息。

爬虫简单思想:请求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()");
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值