如何使用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" ...
随机推荐
- 超越Mask-RCNN:谷歌大脑的AI,自己写了个目标检测AI
这是一只AI生出的小AI. 谷歌大脑的Quoc Le团队,用神经网络架构搜索 (NAS) ,发现了一个目标检测模型.长这样: △ 看不清请把手机横过来 它的准确率和速度都超过了大前辈Mask-RCNN ...
- coding++:高并发解决方案限流技术-使用RateLimiter实现令牌桶限流-Demo
RateLimiter是guava提供的基于令牌桶算法的实现类,可以非常简单的完成限流特技,并且根据系统的实际情况来调整生成token的速率. 通常可应用于抢购限流防止冲垮系统:限制某接口.服务单位时 ...
- HashCode()与equals()深入理解
1.hashCode()和equals()方法都是Object类提供的方法, hashCode()返回该对象的哈希码值,该值通常是一个由该对象的内部地址转换而来的int型整数, Object的equa ...
- CSS盒子模型(boeder)+浮动(float)+定位(position)
盒子的上下层:margin--background-color--background-image--padding--content--border(最外层) 计算一个盒子宽 = 内容的宽(wid ...
- 【nodejs 爬虫】使用 puppeteer 爬取链家房价信息
使用 puppeteer 爬取链家房价信息 目录 使用 puppeteer 爬取链家房价信息 页面结构 爬虫库 pupeteer 库 实现 打开待爬页面 遍历区级页面 方法一 方法二 遍历街道页面 遍 ...
- Error while processing transaction.java.lang.IllegalStateException: begin() called when transaction is OPEN!
Spark Streaming从flume 中使用Poll拉取数据时,报如下错误: Error while processing transaction. java.lang.IllegalState ...
- A 拜访奶牛
时间限制 : - MS 空间限制 : 65536 KB 评测说明 : 时限1000ms 问题描述 经过了几周的辛苦工作,贝茜终于迎来了一个假期.作为奶牛群中最会社交的牛,她希望去拜访N(1< ...
- C - Can you solve this equation? HDU - 2199(二分水题)
Now,given the equation 8x^4 + 7x^3 + 2x^2 + 3x + 6 == Y,can you find its solution between 0 and 100; ...
- Q - Marriage Match IV (非重复最短路 + Spfa + 网络最大流Isap)
Q - Marriage Match IV Do not sincere non-interference. Like that show, now starvae also take part in ...
- C++STL(二)——vector容器
STL--vector容器 vector对象的概念 vector基本操作 vector对象的初始化.赋值 vector查找.替换(已在上一片 string类 博客总结过了,不再总结) vector添加 ...