文档章节

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

路小磊
 路小磊
发布于 2017/11/19 21:29
字数 937
阅读 2551
收藏 91

介绍

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

开始

分析页面

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

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

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

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

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

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

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

模拟Http请求爬取页面

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

//请求列表页
String listContent = HttpUtil.get("http://www.oschina.net/action/ajax/get_more_news_list?newsType=&p=2");
//使用正则获取所有标题
List<String> titles = ReUtil.findAll("<span class=\"text-ellipsis\">(.*?)</span>", listContent, 1);
for (String title : titles) {
	//打印标题
	Console.log(title);
}

抓取结果为:

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

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

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

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

结语

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

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

  • 找到列表页(很多网站都没有一个总的列表页)
  • 请求列表页,获取详情页地址
  • 请求详情页并使用正则匹配我们需要的内容
  • 入库或将内容保存为文件

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

  • 封IP
  • 对请求Header有特殊要求
  • 对Cookie有特殊要求
  • 验证码

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

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

© 著作权归作者所有

共有 人打赏支持
路小磊

路小磊

粉丝 312
博文 53
码字总数 40548
作品 5
乌海
程序员
加载中

评论(20)

双曲线

引用来自“两广总督bogang”的评论

HtmlUnit可以取不到京东的秒杀价(3648.00)

引用来自“zlikun”的评论

有可有价格是通过Ajax请求生成的,普通的爬虫不具备执行js的通力,所以无法得到这个值。
需要嵌套浏览器内核的爬虫库来搞,把页面下到本地渲染完了再爬
路小磊
路小磊

引用来自“在下路哥”的评论

引用来自“路小磊”的评论

引用来自“在下路哥”的评论

怎么查看下拉翻页的js和效果是怎么弄的?不会看

这你就要问红薯了

回复@路小磊 : 怎么在f12那里看,我不会找

这个就要自行百度了哦
开源中国首席罗纳尔多
开源中国首席罗纳尔多

引用来自“路小磊”的评论

引用来自“在下路哥”的评论

怎么查看下拉翻页的js和效果是怎么弄的?不会看

这你就要问红薯了

回复@路小磊 : 怎么在f12那里看,我不会找
路小磊
路小磊

引用来自“宇润”的评论

红薯很感动,然后封杀了这种采集方法

当然是交了保护费滴,哈哈
路小磊
路小磊

引用来自“在下路哥”的评论

怎么查看下拉翻页的js和效果是怎么弄的?不会看

这你就要问红薯了
宇润
宇润
红薯很感动,然后封杀了这种采集方法
开源中国首席罗纳尔多
开源中国首席罗纳尔多
怎么查看下拉翻页的js和效果是怎么弄的?不会看
路小磊
路小磊

引用来自“爱喝貓的咖啡”的评论

为什么都不刨妹子图了?

你可以刨后发出来,哈哈。
路小磊
路小磊

引用来自“开源中国首席男司机”的评论

python request bs4蜜汁微笑。。。

Python确实也是我的第一选择,语言不重要,顺便说下,使用Hutool并不比python麻烦哦。
MrXionGe
MrXionGe

引用来自“obhen”的评论

请大声告诉我,红薯家的主流颜色是啥?
原谅绿!
Hutool 3.1.1 跨越发布,Java 工具集

Hutool 是一个Java工具包,提供了丰富的文件、日期、日志、正则、字符串、配置文件等工具方法,并封装了一套简单易用的ORM框架。 主页:http://hutool.cn/ 文档:http://hutool.mydoc.io/ (...

路小磊
2017/09/13
775
40
Hutool 3.0.5 发布,Java 工具集

Hutool 是一个Java工具包,提供了丰富的文件、日期、日志、正则、字符串、配置文件等工具方法,并封装了一套简单易用的ORM框架。 主页:http://hutool.cn/ 文档:http://hutool.mydoc.io/ (...

路小磊
2017/05/04
1K
14
Hutool 3.0.7 发布,Java 工具集

Hutool 是一个Java工具包,提供了丰富的文件、日期、日志、正则、字符串、配置文件等工具方法,并封装了一套简单易用的ORM框架。 主页:http://hutool.cn/ 文档:http://hutool.mydoc.io/ (...

路小磊
2017/06/15
1K
24
基于Google Flutter的开源中国客户端,支持Android与iOS

FlutterOSC 基于Google Flutter的开源中国客户端,支持Android和iOS。 码云戳这里 GitHub戳这里 关于Google Flutter Android扫码下载APK 请使用手机浏览器扫码下载,不要使用微信或者qq扫码 ...

我遇见谁_会有怎样的对白
05/09
0
0
嘿哥们,全国最大的“同性交友”APP了解一下?

嗯,是这样的,开源中国社区成立于2008年8月,旨在为中国的IT技术人员提供一个全面的、快捷更新的用来检索开源软件以及交流使用开源经验的平台。 当然,为了用户能够随时随地在社区中聊天、交...

oschina
06/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

WePY 开发指南注意事项

**** 1 代码规范 **** 1 变量与方法尽量使用驼峰式命名,并且注意避免使用$ 开头的标识为Wepy框架的内建属性和方法,可在JavaScript 脚步可以this的方式直接使用。2 小程序入口,页面,...

舒龙虎
26分钟前
3
0
70:shell脚本中的逻辑判断(文件目录属性判断、if判断、case用法)

1、shell脚本中的逻辑判断语法: 格式1:if 条件 ; then 语句 ; fi 格式2:if 条件 ; then 语句; else 语句;fi 格式3:if 条件; then 语句;elif 条件;then 语句;else 语句;fi 逻辑...

芬野de博客
26分钟前
2
0
Java调用脚本并输出脚本返回数据

public class ExecuteSHFile {private static Logger logger = LoggerFactory.getLogger(ExecuteSHFile.class);public static String executeSHFile(String shutdown_path) throws ......

Aeroever
28分钟前
1
0
MySQL常见错误

###Ignoring query to other database 登录数据库时 没有在用户名前加-u

我是菜鸟我骄傲
29分钟前
2
0
mysql之explain分析

我是参考这篇文章的 https://my.oschina.net/ruoli/blog/1807394

求是科技
30分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部