JSOUP 教程—— Java爬虫,简易入门,秒杀htmlparser

转载自 JSOUP 教程—— Java爬虫,简易入门,秒杀htmlparser

关于爬虫,之前一直用做第一个站的时候,记得那时候写的 爬虫  是爬sina 的数据,用的就是 htmlparser  可能是由于好奇和满足我当时的需求,那开始就各种写啊,一个页面,把需要的内容处理下来,复杂的写完后不写注释自己都看不懂,一直我也知道 JSOUP  好,也感觉没空学习新的 爬虫  (完全是借口啊)。最近我试了一下用 JSOUP  ,尼玛,完全爱上了,完全秒杀 htmlparser  。

PS:用过都知道JSOUP 是支持css select (CSS选择器),对于我这样的 jQuery  用的非常6666的人来说,哪就是一个字,爽死了。

Maven  依赖包:

<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.9.2</version>
</dependency>


下面展示的代码是,实现了相同的一个业务,爬取了百度的一些内容。但是你可以看到,Htmlparser繁琐,JSOUP轻量级。不多说下面看代码。

Htmlparser Java代码:

String url = "http://www.baidu.com/s?wd=site:(www.zybang.com)&rn=50";
/**开始爬取*/
Parser parser = new Parser(url);
//设置字符集
parser.setEncoding("utf-8");
//创建一个filter
NodeFilter contentFilter = new AndFilter(new TagNameFilter("div"), new HasAttributeFilter("id","content_left"));
//通过Filter过滤
NodeList contents = parser.parse(contentFilter);
//再创建Filter,用途通过父类去过滤子类
NodeFilter divsFilter = new AndFilter(new TagNameFilter("div"), new HasAttributeFilter("data-tools"));
NodeList divs = contents.extractAllNodesThatMatch(divsFilter,true);
//取值
for (int i = 0; i < divs.size(); i++) {Div div = (Div) divs.elementAt(i);String json = div.getAttribute("data-tools");if(StringUtils.isNotBlank(json) && json.trim().startsWith("{")){//获取到jsonJSONObject jsonObj = JSONObject.fromObject(json.trim());//获取urlString durl = jsonObj.getString("url");//内容url//do something}
}
相同业务之后改成 JSOUP Java代码:
String url = "http://www.baidu.com/s?wd=site:(www.zybang.com)&rn=50";
Document doc = Jsoup.connect(url).get();
Elements divs = doc.select("div#content_left div[data-tools]");
for (Element element : divs) {String json = element.attr("data-tools");if(StringUtils.isNotBlank(json) && json.trim().startsWith("{")){//获取到jsonJSONObject jsonObj = JSONObject.fromObject(json.trim());//获取urlString durl = jsonObj.getString("url");//内容url//do something}
}

JSOUP  创建一个模拟浏览器行为的请求头:

瞬间你看看,逻辑思维都符合现在流行的链式编程。

Document doc = Jsoup.connect(url).header("Accept", "*/*").header("Accept-Encoding", "gzip, deflate").header("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3").header("Referer", "https://www.baidu.com/").header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0").timeout(5000).get();

然后就开启jQuery模式了。

//获取id = 1 的元素的文本值。
doc.select("#1").text();
//获取id = 1 的元素的HTML值。
doc.select("#1").html();
//获取id =1 直接子类class='css1' , 然后所有子类的含有class = css2 的集合
doc.select("#id > .css1 .css2");
.....

后面我会采用视频讲解的方式,结合实战去讲解。等着吧,我现在在整理 FreeMarker  的视频!




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3到6年的.NETer应该掌握哪些知识

我们组的开发人力一直比较紧张&#xff0c;今年春节后&#xff0c;高层终于给了几个headcount&#xff0c;我们可以开始招人了。从三月初我们就开始找简历&#xff0c;渠道有拉钩&#xff0c;内推&#xff0c;我司自己的招聘网站和智联等。简历筛了很多&#xff0c;也打了很多电…

多边形上点的顺序排序_一种寻找多边形视觉中心的新算法

遇到的问题在一个多边形上放置文本标签或工具提示的最佳位置通常位于其“视觉中心”的某个位置&#xff0c;即多边形内部的一个点&#xff0c;周围有尽可能多的空间。计算这样一个中心首先想到的是多边形质心。你可以用一个简单快速的公式计算多边形中心&#xff0c;但如果形状…

通过Jexus 部署 dotnetcore版本MusicStore 示例程序

ASPNET Music Store application 是一个展示最新的.NET 平台&#xff08;包括.NET Core/Mono等&#xff09;上使用MVC 和Entity Framework的示例程序&#xff0c;本文将展示如何在CentOS上运行.NET Core版本的MusicStore&#xff0c;并通过Jexus对外发布。 上篇文章 《结合Jexu…

java爬虫之基于httpclient的简单Demo(二)

转载自 java爬虫之基于httpclient的简单Demo(二)延续demo1的 java爬虫的2种爬取方式&#xff08;HTTP||Socket&#xff09;简单Demo(一)&#xff0c;demo2出炉啦&#xff0c;大家想学爬虫都可以从这个网盘学习哦&#xff1a;https://pan.baidu.com/s/1pJJrcqJ#list/path%2F 免费…

神经网络中的最小二乘_深度神经网络:噪声中解读出科学

该研究介绍了一种基于深度神经网络的基本新方法&#xff0c;以基于已知的物理模型将函数形式拟合到噪声数据。来自美国橡树林国家实验室的Stephen Jesse领导的团队&#xff0c;提出了一种新的方法&#xff0c;可用来逆向解决问题&#xff0c;可从基于光谱成像数据的最小二乘拟合…

微软开放Holographic平台,意在统一VR的操作系统?

在刚刚结束的台北电脑展上&#xff0c;微软没有发布很多新品&#xff0c;而是宣布向第三方开放Windows Holographic&#xff08;全息&#xff09;平台&#xff0c;鼓励其他VR/AR头显使用该平台。近日外媒engadget发表文章&#xff0c;文中作者讲述了微软的野心&#xff0c;有意…

java爬虫的2种爬取方式(HTTP||Socket)简单Demo(一)

转载自 java爬虫的2种爬取方式&#xff08;HTTP||Socket&#xff09;简单Demo(一)最近在找java的小项目自己写着玩&#xff0c;但是找不到合适的&#xff0c;于是写开始学一点爬虫&#xff0c;自己也是感觉爬虫比较有趣。这里自己找了一个教程&#xff0c;这一次写的是基于Sock…

linux mysql复制一个表结构图_详解Windows和Linux下从数据库导出表结构,以及Linux下如何导入.sql文件到MySQL数据库...

本文首先讲解window下如何使用Navicat for MySQL导出表。1、如下图所示&#xff0c;目标数据库是mydatabase&#xff0c;数据库中有四张表。2、选中该数据库&#xff0c;右键——数据传输。3、左边可以选择要导出哪几张表&#xff0c;右边选择.sql文件的存储位置。4、在高级中&…

基于Jenkins快速搭建持续集成环境

看了园友张善友的博文,尝试成功.便有此作.原网址: 基于 Jenkins 快速搭建持续集成环境 天下事有难易乎?为之,则难者亦易矣&#xff1b;不为,则易者亦难矣. 首先要学会使用MSBuild构建脚本 附网址:http://www.infoq.com/cn/articles/MSBuild-1. 目标:学会用MSBuild编译程序,主要…

零基础写Java知乎爬虫之进阶篇

转载自 零基础写Java知乎爬虫之进阶篇前面几篇文章&#xff0c;我们都是简单的实现了java爬虫抓取内容的问题&#xff0c;那么如果遇到复杂情况&#xff0c;我们还能继续那么做吗&#xff1f;答案当然是否定的&#xff0c;之前的仅仅是入门篇&#xff0c;都是些基础知识&#x…

MySQL导入冲突保留两者_面试被问MySQL 主从复制,怎么破?

一、前言随着应用业务数据不断的增大&#xff0c;应用的响应速度不断下降&#xff0c;在检测过程中我们不难发现大多数的请求都是查询操作。此时&#xff0c;我们可以将数据库扩展成主从复制模式&#xff0c;将读操作和写操作分离开来&#xff0c;多台数据库分摊请求&#xff0…

“.Net 社区虚拟大会”(dotnetConf) 2016 Day 1 Keynote: Scott Hunter

“.Net 社区虚拟大会”(dotnetConf) 2016 今天凌晨在Channel9 上召开&#xff0c;在Scott Hunter的30分钟的 Keynote上没有特别的亮点&#xff0c;所讲内容都是 微软“.Net社区虚拟大会”dotnetConf2015&#xff1a;关键词&#xff1a;.NET 创新、开源、跨平台 的具体化&#x…

Java(enum)枚举用法详解

转载自 Java&#xff08;enum&#xff09;枚举用法详解本篇文章主要介绍了Java 枚举用法详解&#xff0c;枚举的好处&#xff1a;可以将常量组织起来&#xff0c;统一进行管理。有兴趣的可以一起来了解一下。概念 enum的全称为 enumeration&#xff0c; 是 JDK 1.5 中引入的新特…

python处理脑电信号_用ICA去除脑电信号中的眼球链接

你有没有注意到你的“组件”完全是原始信号的比例和颠倒&#xff1f;这是因为你不能得到比信号更多的成分。在您需要执行以下步骤&#xff1a;将所有EEG通道输入ICA手动移除包含眨眼或其他伪影的组件用反变换重构让我们详细了解第2步&#xff1a;为什么要手动删除组件&#xff…

ASP.NET Core 中文文档 第一章 入门

原文&#xff1a;Getting Started翻译&#xff1a;娄宇(Lyrics)校对&#xff1a;刘怡(AlexLEWIS) 1、安装 .NET Core 2、创建一个新的 .NET Core 项目&#xff1a; mkdir aspnetcoreappcd aspnetcoreapp dotnet new 3、编辑 project.json 文件&#xff0c;添加 Kestrel HTTP se…

Properties文件的XML格式

转载自 Properties文件的XML格式 想必大家都用过*.properties文件&#xff0c;作为配置文件。但是&#xff0c;如果该文件写入了中文&#xff0c;待编译后内容就会成为乱码&#xff0c;使用native命令也好、使用ant执行编码转换也好&#xff0c;多少有点麻烦&#xff0c;与其如…

python简单爬虫课题_VS2019python爬虫入门

VS2019新建python项目在vs2019中添加python编译环境创建python控制台应用程序项目配置python环境安装requests第三方库管理程序包&#xff0c;执行安装requests包命令pip install requests导入第三方包import requests简单爬虫编写import requestsif __name__ "__main__&…

“.Net 社区虚拟大会”(dotnetConf) 2016 Day 2 Keynote: Miguel de Icaza

美国时间 6月7日--9日&#xff0c;为期三天的微软.NET社区虚拟大会正式在 Channel9 上召开&#xff0c;美国时间6.8 是第二天&#xff0c; Miguel de Icaza 做Keynote&#xff0c;Miguel 在波士顿Xamarin的办公室&#xff0c;所以使用了Skype。 class"video_iframe" …

Java泛型总结

转载自 Java泛型总结 Java泛型是JDK5引入的一个新特性&#xff0c;允许在定义类和接口的时候使用类型参数&#xff08;type parameter&#xff09;。声明的类型参数在使用的时候使用具体的类型来替换。泛型最主要的应用是在JDK5中的新集合类框架中。对于泛型概念的引入&#xf…

用 Visual Studio Code 在 macOS 上创建首个 ASP.NET Core 应用程序

原文&#xff1a;Your First ASP.NET Core Application on a Mac Using Visual Studio Code作者&#xff1a;Daniel Roth、Steve Smith 以及 Rick Anderson翻译&#xff1a;赵志刚校对&#xff1a;何镇汐、刘怡(AlexLEWIS) 本节将展示如何在 macOS 平台上创建首个 ASP.NET Core…