相关推荐recommended
Jsoup+HuTool爬虫技术
作者:mmseoamin日期:2024-02-22

爬虫

百度百科释义

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

Jsoup

百度百科释义

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

做过前端开发的朋友应该知道JQuery,这里的Jsoup其实就是Java版的JQuery;其实作者也不喜欢这些花里胡哨的概念性的东西!但考虑到不同受众和未接触过编程的朋友们还是要简单引导一下

(PS:有很多朋友会问为啥不用Python因为py几行代码就搞定了,更有甚者以为Python就是爬虫!其实这个观点是不正确的,任何技术存在即合理,但要结合具体业务,好钢要用到刀刃上不是?!Python以后有机会再出吧哈哈~~)

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

依赖

        
            org.jsoup
            jsoup
            1.15.3
        
        
            cn.hutool
            hutool-all
            5.8.16
        
        
            org.projectlombok
            lombok
            true
        

代码

    public static void main(String[] args) throws Exception {
        Map headers = new HashMap();
        headers.put("Proxy-Host", "www.duoip.cn"); // 设置代理主机
        headers.put("Proxy-Port", "8000"); // 设置代理端口
        headers.put("Referer", "https://www.bqgka.com/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.com/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.com/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 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());
        }
    }

效果

Jsoup+HuTool爬虫技术,在这里插入图片描述,第1张

Jsoup+HuTool爬虫技术,在这里插入图片描述,第2张

一些思考

反爬策略:很多网站现在都有反爬策略,基于用户请求的headers反爬是最常见的反爬机制。

通过分析目标网站请求头可以得知主要是通过设置Referer(防盗链)和User-Agent(请求终端)

Jsoup+HuTool爬虫技术,在这里插入图片描述,第3张

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

反反爬策略:

伪装浏览器:即在爬虫中添加headers,并在headers中添加浏览器

伪装防盗链:在headers中添加防盗链,通过抓包查看具体值

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

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