哈?试着爬一下
2024-10-11 本文已影响0人
小尘哥
有些网页的内容想取到本地使用,但是一行一行复制又太麻烦,本着重复劳动均能机械化的思想,那就想办法爬一下。
注:在进行网页爬取时,我们需要遵守网站的robots.txt协议,避免对网站造成过大的访问压力。同时,我们也需要注意数据的版权问题,尊重原创作品和作者的权益。
爬取的思路无非就是先获取url+参数,再看返回的数据结构(html或者json或者其他格式),再通过解析得到自己想要的数据。如果返回json就很简单了,直接json转换就可以了,以下以爬取简书首页文章标题为例,提供两种解析返回html的办法。
- 方式1:采用hutool的正则匹配工具类
- 方式2:使用jsoup进行dom解析
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、其他说明
- 毕竟爬取别人数据可能会给别人造成困扰,建议学习使用。
- 有些网站有反扒机制,比如频繁请求出验证码、IP限制等等,见招拆招即可。