全栈程序猿的成长@IT·互联网

哈?试着爬一下

2024-10-11  本文已影响0人  小尘哥

有些网页的内容想取到本地使用,但是一行一行复制又太麻烦,本着重复劳动均能机械化的思想,那就想办法爬一下。

注:在进行网页爬取时,我们需要遵守网站的robots.txt协议,避免对网站造成过大的访问压力。同时,我们也需要注意数据的版权问题,尊重原创作品和作者的权益。

爬取的思路无非就是先获取url+参数,再看返回的数据结构(html或者json或者其他格式),再通过解析得到自己想要的数据。如果返回json就很简单了,直接json转换就可以了,以下以爬取简书首页文章标题为例,提供两种解析返回html的办法。

1、依赖引入

         <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.32</version>
        </dependency>
       <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.15.4</version>
        </dependency>

2、爬取代码实现

public class GrabDemo {

    public static void main(String[] args) {
        Logger logger = LoggerFactory.getLogger(GrabDemo.class);
        //需要爬取的url,有时候可能需要带参数或者是post请求,可以通过F12查看浏览器进行分析
        String grabUrl = "https://www.jianshu.com/";
        String content = HttpUtil.get(grabUrl);

        //方式一,通过正则直接匹配
        logger.info("开始使用第一种方式获取title");
        String reg = "<a class=\"title\" target=\"_blank\" href=\"(.*?)\">(.*?)</a>";
        List<String> titles =  ReUtil.findAll(reg, content, 2);
        titles.forEach(System.out::println);
        logger.info("使用第一种方式获取title结束,共获取到{}条记录",titles.size());


        logger.info("-----------------------我是分割线----------------");

        //方式二,通过jsoup解析dom
        logger.info("开始使用第二种方式获取title");
        Document document = Jsoup.parse(content);
        Elements elements = document.getElementsByAttributeValue("class","title").select("a");
        List<String> titles2 = elements.stream().map(Element::text).toList();
        titles2.forEach(System.out::println);
        logger.info("使用第二种方式获取title结束,共获取到{}条记录",titles2.size());
    }

}

3、爬取结果

10:40:21.139 [main] INFO com.mos.simple.http.GrabDemo -- 开始使用第一种方式获取title
节俭
抖音增粉技巧全解析:顺应趋势巧用抖音直播,增加有效粉丝粘性
跳水冠军也爱古风?全红婵簪花汉服妆造引热议!
南京之行01 | 瞻园的景色真美
10:40:21.158 [main] INFO com.mos.simple.http.GrabDemo -- 使用第一种方式获取title结束,共获取到4条记录
10:40:21.160 [main] INFO com.mos.simple.http.GrabDemo -- -----------------------我是分割线----------------
10:40:21.161 [main] INFO com.mos.simple.http.GrabDemo -- 开始使用第二种方式获取title
节俭
抖音增粉技巧全解析:顺应趋势巧用抖音直播,增加有效粉丝粘性
跳水冠军也爱古风?全红婵簪花汉服妆造引热议!
南京之行01 | 瞻园的景色真美
10:40:21.284 [main] INFO com.mos.simple.http.GrabDemo -- 使用第二种方式获取title结束,共获取到4条记录

4、其他说明

上一篇 下一篇

猜你喜欢

热点阅读