java htmlunit hellod_使用Hutool爬取开源中国的开源资讯

本文介绍了如何使用Hutool-http库进行http请求,通过分析开源中国首页的开源资讯模块,获取列表页内容,并利用正则表达式提取文章标题。通过示例代码展示了抓取过程,强调了抓取难点在于分析页面和定位所需内容,同时提到了在抓取过程中可能遇到的问题及解决方案。
摘要由CSDN通过智能技术生成

介绍

为了演示Hutool-http的http请求功能,因此这个栗子用红薯家的开源资讯开刀,在此做个简单的Demo。

开始

分析页面

打开红薯家的主页,我们找到最显眼的开源资讯模块,然后点击“更多”,打开“开源资讯”板块。

e7b9d9374cde29f8438151f03cb3bf65.png

打开F12调试器,点击快捷键F12打开Chrome的调试器,点击“Network”选项卡,然后在页面上点击“全部资讯”。

c1400008fead0835267aad43c6975d21.png

a461c2d82fd759ce8796d9bf6f2ae93d.png

由于红薯家的列表页是通过下拉翻页的,因此下拉到底部会触发第二页的加载,此时我们下拉到底部,然后观察调试器中是否有新的请求出现。如图,我们发现第二个请求是列表页的第二页。

8f51b9700e52d7154aa98ab5ef4e38c7.png

我们打开这个请求地址,可以看到纯纯的内容。红框所指地址为第二页的内容,很明显p参数代表了页码page。

6a25fb6c659b4d19881b3a09795d32ad.png

我们右键点击后查看源码,可以看到源码。

9f177ab46b8d429bae696e9ad683d068.png

找到标题部门的HTML源码,然后搜索这个包围这个标题的HTML部分,看是否可以定位标题。

72e63f8952be09c2bcf4f71594572b6d.png

e9b0a88a9cd45169f13d75dda8ba5d87.png

至此分析完毕,我们拿到了列表页的地址,也拿到了可以定位标题的相关字符(在后面用正则提取标题用),就可以开始使用Hutool编码了。

模拟Http请求爬取页面

使用Hutool-http配合ReUtil请求并提取页面内容非常简单,代码如下:

//请求列表页

String listContent = HttpUtil.get("http://www.oschina.net/action/ajax/get_more_news_list?newsType=&p=2");

//使用正则获取所有标题

List titles = ReUtil.findAll("(.*?)", listContent, 1);

for (String title : titles) {

//打印标题

Console.log(title);

}

抓取结果为:

22e55d3ca093b354721e22cd5595bfd7.png

其实核心就前两行代码,第一行请求页面内容,第二行正则定位所有标题行并提取标题部分。

这里我解释下正则部分:ReUtil.findAll方法用于查找所有匹配正则表达式的内容部分,第二个参数1表示提取第一个括号(分组)中的内容,0表示提取所有正则匹配到的内容。这个方法可以看下core模块中ReUtil章节了解详情。

(.*?)这个正则就是我们上面分析页面源码后得到的正则,其中(.*?)表示我们需要的内容,.表示任意字符,*表示0个或多个,?表示最短匹配,整个正则的意思就是。,以开头,结尾的中间所有字符,中间的字符要达到最短。?的作用其实就是将范围限制到最小,不然很可能匹配到后面去了。

关于正则表达式这块可以看下我的博客:正则表达式简明参考

结语

不得不说,抓取本身并不困难,尤其配合Hutool会让这项工作变得更加简单快速,而其中的难点便是分析页面和定位我们需要的内容。

真正的内容抓取分为连个部分:

找到列表页(很多网站都没有一个总的列表页)

请求列表页,获取详情页地址

请求详情页并使用正则匹配我们需要的内容

入库或将内容保存为文件

而且在抓取过程中我们也会遇到各种问题,包括但不限于:

封IP

对请求Header有特殊要求

对Cookie有特殊要求

验证码

这些问题都有一些解决办法,具体要在具体的开发中分析解决。

希望大家看到这个栗子有所启发,也为Hutool提供更多更好的意见~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值