Jsoup+HuTool爬虫实战

Jsoup+HuTool爬虫实战

爬虫

百度百科释义

网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫

Jsoup

百度百科释义

jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

做过前端开发的朋友应该知道JQuery,这里的Jsoup其实就是Java版的JQuery;其实作者也不喜欢这些花里胡哨的概念性的东西!但考虑到不同受众和未接触过编程的朋友们还是要简单引导一下
(PS:有很多朋友会问为啥不用Python因为py几行代码就搞定了,更有甚者以为Python就是爬虫!其实这个观点是不正确的,任何技术存在即合理,但要结合具体业务,好钢要用到刀刃上不是?!Python以后有机会再出吧哈哈~~)

说人话:爬网页就是所见即所得

依赖

        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.15.3</version>
        </dependency>
        <dependency>
            <groupId>***.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.16</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

代码

    public static void main(String[] args) throws Exception {
        Map headers = new HashMap();
        headers.put("Proxy-Host", "www.duoip.***"); // 设置代理主机
        headers.put("Proxy-Port", "8000"); // 设置代理端口
        headers.put("Referer", "https://www.bqgka.***/s?q=%E5%85%A8%E8%81%8C%E5%A4%A9%E4%B8%8B"); // 伪装防盗链
        headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"); // 伪装浏览器
        //
        int bookNO = 502;
        Document doc = Jsoup.connect("https://www.bqgka.***/book/" + bookNO).headers(headers).ignoreContentType(true).get();
//        System.out.println(Jsoup.parseBodyFragment(doc.html()).body());
        String bookName = doc.getElementsByTag("h1").text();
        //分页遍历
        for (int p = 1; p <= 99999; p++) {
            try {
                doc = Jsoup.connect("https://www.bqgka.***/book/" + bookNO + "/" + p + ".html").headers(headers).ignoreContentType(true).get();
                Elements els = doc.getElementsByClass("Readarea ReadAjax_content");
                String content = doc.getElementsByTag("h1").text() + "\n";
                if (els.size() == 0) {
                    log.info(bookName + "爬取完成");
                    break;
                }
                for (int i = 0; i < els.size(); i++) {
                    List<TextNode> textNodes = els.get(i).textNodes();
                    for (int j = 0; j < textNodes.size(); j++) {
                        content += textNodes.get(j).text() + "\n";
                    }
                }
                FileUtil.appendUtf8String(content, "D:\\spiders\\mybook\\《" + bookName + "》.txt");
                //线程休眠-防止网站检测到请求过于频繁
                Thread.sleep(500);
            } catch (IOException exception) {
                log.error(exception.getMessage());
                Thread.sleep(1000);
                continue;
            }
            log.info("{},爬取成功", doc.getElementsByTag("h1").text());
        }
    }

效果


一些思考

反爬策略:很多网站现在都有反爬策略,基于用户请求的headers反爬是最常见的反爬机制。
通过分析目标网站请求头可以得知主要是通过设置Referer(防盗链)和User-Agent(请求终端)

见招拆招,你有反爬策略我们当然也有反反爬策略,正所谓你有张良计,我有过墙梯。三十年河东,三十年河西,莫欺少年穷!(有点中二了,哈哈~~~)

反反爬策略:
伪装浏览器:即在爬虫中添加headers,并在headers中添加浏览器
伪装防盗链:在headers中添加防盗链,通过抓包查看具体值

想简单了解反爬和反反爬的朋友可以康康这个

写在最后:上面的案例是最简单的爬虫,也还有很多优化的地方(比如多线程,IP代理池等),爬虫技术是为了帮助我们更好的利用互联网进行数据分析、信息整合等业务,自己娱乐一下就好,互联网不是法外之地,切勿做违法犯罪之事,否则将喜提银手镯。。。。。。

转载请说明出处内容投诉
CSS教程_站长资源网 » Jsoup+HuTool爬虫实战

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买