如何使用Jsoup爬取网页内容
前言:
这是一篇迟到很久的文章了,人真的是越来越懒,前一阵用jsoup实现了一个功能,个人觉得和selenium的webdriver原理类似,所以今天正好有时间,就又来更新分享了。
实现场景:
爬取博客园https://www.cnblogs.com/longronglang,文章列表中标题、链接、发布时间及阅读量

思路:
1、引入jar包
2、通过httpclient,设置参数,代理,建立连接,获取HTML文档(响应信息)
3、将获取的响应信息,转换成HTML文档为Document对象
4、使用jQuery定位方式,这块就和web自动化一样了定位获取文本及相关属性
相关详细使用参考官网:https://jsoup.org/
实现:
1、引入依赖
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.3</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
2、通过httpclient,设置参数,代理,建立连接,获取HTML文档(响应信息)
String requestUrl = "https://www.cnblogs.com/longronglang/";
HttpClient client = new HttpClient();
HttpClientParams clientParams = client.getParams();
clientParams.setContentCharset("UTF-8");
GetMethod method = new GetMethod(requestUrl);
String response =method.getResponseBodyAsString();
3、将获取的响应信息,转换成HTML文档为Document对象
Document document = Jsoup.parse(response);
4、使用jQuery定位方式,这块就和web自动化一样了定位获取文本及相关属性
这里可以仔细看下,也可以说是核心思路了,如下图:

从图中可以看到,文章标题在在a标签中,也就是通过class属性为postTitle2进行绑定,那么我们的dom对象就定位到这里即可,那么我想获取文章标题这个dom对象,可以写成如下代码:
Elements postItems = document.getElementsByClass("postTitle2");
同理,获取发布时间及阅读量,也可以写成如下代码:
Elements readcontexts = document.getElementsByClass("postDesc");
最后我们来段整合的代码如下:
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpClientParams;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import org.junit.Test; import java.io.IOException; public class JsoupTest { @Test
public void test() {
String requestUrl = "https://www.cnblogs.com/longronglang/";
HttpClient client = new HttpClient();
HttpClientParams clientParams = client.getParams();
clientParams.setContentCharset("UTF-8");
GetMethod method = new GetMethod(requestUrl);
String response = null;
int code = 0;
try {
code = client.executeMethod(method);
response = method.getResponseBodyAsString();
if (code == HttpStatus.SC_OK) {
Document document = Jsoup.parse(response);
Elements postItems = document.getElementsByClass("postTitle2");
Elements readcontexts = document.getElementsByClass("postDesc");
for (int i = 0; i < postItems.size(); i++) {
System.out.println("文章标题:" + postItems.get(i).text());
System.out.println("文章地址:" + postItems.get(i).attr("href"));
System.out.println("发布信息:" + readcontexts.get(i).text());
}
} else {
System.out.println("返回状态不是200,可能需要登录或者授权,亦或者重定向了!");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果如下:

到此,一个爬虫搞完,这里只事抛砖引用,有兴趣的同学,请自行扩展。
如果感情一开始就是不对等的,那么索性就早点结束掉它,利人利己。
如何使用Jsoup爬取网页内容的更多相关文章
- 【Jsoup爬取网页内容】
思路:根据给定URL分析其源码,得到所需的网页内容的位置,制定规则采集或下载之 采集的图片和文字示例: tags: tag:brazil tag:dog tag:pet tag:pointyfaced ...
- java爬取网页内容 简单例子(2)——附jsoup的select用法详解
[背景] 在上一篇博文java爬取网页内容 简单例子(1)——使用正则表达式 里面,介绍了如何使用正则表达式去解析网页的内容,虽然该正则表达式比较通用,但繁琐,代码量多,现实中想要想出一条简单的正则表 ...
- java爬虫爬取网页内容前,对网页内容的编码格式进行判断的方式
近日在做爬虫功能,爬取网页内容,然后对内容进行语义分析,最后对网页打标签,从而判断访问该网页的用户的属性. 在爬取内容时,遇到乱码问题.故需对网页内容编码格式做判断,方式大体分为三种:一.从heade ...
- Jsoup爬取带登录验证码的网站
今天学完爬虫之后想的爬一下我们学校的教务系统,可是发现登录的时候有验证码.因此研究了Jsoup爬取带验证码的网站: 大体的思路是:(需要注意的是__VIEWSTATE一直变化,所以我们每个页面都需要重 ...
- jsoup爬取某网站安全数据
jsoup爬取某网站安全数据 package com.vfsd.net; import java.io.IOException; import java.sql.SQLException; impor ...
- java爬虫入门--用jsoup爬取汽车之家的新闻
概述 使用jsoup来进行网页数据爬取.jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuer ...
- Selenium+PhantomJs 爬取网页内容
利用Selenium和PhantomJs 可以模拟用户操作,爬取大多数的网站.下面以新浪财经为例,我们抓取新浪财经的新闻版块内容. 1.依赖的jar包.我的项目是普通的SSM单间的WEB工程.最后一个 ...
- 使用Jsoup 爬取网易首页所有的图片
package com.enation.newtest; import java.io.File; import java.io.FileNotFoundException; import java. ...
- python的requests模块爬取网页内容
注意:处理需要用户名密码认证的网站,需要auth字段. # -*- coding:utf-8 -*- import requests headers = { "User-Agent" ...
随机推荐
- Linux常用命令 - find命令基础使用(重点)
1篇测试必备的Linux常用命令,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1672457.html 首先,先 ...
- Go语言库系列之dotsql
导读:能单独拎出SQL文件的某一行或几行执行,是不是非常有趣?今天我们来介绍一下这个有意思的库--dotsql. 背景介绍 dotsql不是ORM,也不是SQL查询语句的构建器,而是可以在一个SQL文 ...
- python运算符&条件语句
运算符 算术运算符:+ ,- , *, /, %, **,// 赋值运算符:= ,+=,-=, *=,/=,%=, **= 比较运算符:==,!=, >, <, >=,<= 成 ...
- 【原创】linux spinlock/rwlock/seqlock原理剖析(基于ARM64)
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...
- iOS 性能优化点
用 ARC 管理内存 在正确的地方使用 reuseIdentifier 尽量把 views 设置为完全不透明 如果你有透明的 Views 你应该设置它们的 opaque(不透明)属性为 YES.例如一 ...
- Ubuntu 18 安装MySQL 5.7
1.首先把系统换到阿里云的镜像源,需要等待一会 2.系统更新完毕后执行MySQL安装命令:sudo apt install mysql-server 3.查看MySQL服务状态:sudo servic ...
- Java实现自定义数组及其方法
自定义数组 主要功能有增.删(根据索引,根据值).改.查扩容等功能 package array; public class CustomArray { private int[] array = nu ...
- Collections.sort详解
Collections.sort(list, new PriceComparator());的第二个参数返回一个int型的值,就相当于一个标志,告诉sort方法按什么顺序来对list进行排序. Com ...
- mybatis诡异的bug
在使用mybatis中使用 foreach 时,出现了一个诡异的bug java文件中是 List<ImportTaskInfoEntity> selectByCalcBatchIds(@ ...
- 并查集 & 最小生成树详细讲解
并查集 & 最小生成树 并查集 Disjoint Sets 什么是并查集? 并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将 ...