Jsoup获取网页内容(并且解决中文乱码问题)
1. 根据连接地址获取网页内容,解决中文乱码页面内容,请求失败后尝试3次
private static Document getPageContent(String urlStr) {
for (int i = 1; i <= 3; i++) {
try {
URL url = new URL(urlStr);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// 默认就是Get,可以采用post,大小写都行,因为源码里都toUpperCase了。
connection.setRequestMethod("GET");
// 是否允许缓存,默认true。
connection.setUseCaches(Boolean.FALSE);
// 是否开启输出输入,如果是post使用true。默认是false
// connection.setDoOutput(Boolean.TRUE);
// connection.setDoInput(Boolean.TRUE);
// 设置请求头信息
connection.addRequestProperty("Connection", "close");
// 设置连接主机超时(单位:毫秒)
connection.setConnectTimeout(8000);
// 设置从主机读取数据超时(单位:毫秒)
connection.setReadTimeout(8000);
// 设置Cookie
// connection.addRequestProperty("Cookie", "你的Cookies");
// 开始请求
int index = urlStr.indexOf("://") + 3;
String baseUri = urlStr.substring(0, index) + url.getHost();
Document doc = Jsoup.parse(connection.getInputStream(), "GBK", baseUri);
if (doc != null) {
return doc;
}
Thread.sleep(3 * 1000);
continue;
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
2. 解析网页数据,通过多种方式获取页面元素
public static void main(String[] args) {
String urlStr = "http://test.cn/a.html";// 静态页面链接地址
Document doc = getPageContent(urlStr);
if (doc != null) {
// 1. 根据id查询元素
Element e1 = doc.getElementById("id");
// 2. 根据标签获取元素
Elements e2 = doc.getElementsByTag("p");
// 3. 根据class获取元素
Element e3 = doc.getElementsByClass("class_p").first();
// 4. 根据属性获取元素
Element e4 = doc.getElementsByAttributeValue("href", "http://test.cn").first();
// 5. 根据查询器获取元素(class 为writing的div下的p)
Elements e5 = doc.select("div.writing>p");
Elements es = doc.select("div .writing p");
if (es != null && es.size() > 0) {
for (Element p : es) {
String pStr = p.text().trim();
System.out.println(pStr);
}
}
}
}
Jsoup获取网页内容(并且解决中文乱码问题)的更多相关文章
- 纯JS设置首页,增加收藏,获取URL參数,解决中文乱码
雪影工作室版权全部,转载请注明[http://blog.csdn.net/lina791211] 1.前言 纯Javascript 设置首页,增加收藏. 2.设置首页 // 设置为主页 functio ...
- JS获取url多个参数及解决中文乱码问题
function GetQueryString(name) { var reg = new RegExp("(^|&)"+ name +"=([^&am ...
- Python3.x:BeautifulSoup()解决中文乱码问题
Python3.x:BeautifulSoup()解决中文乱码问题 问题: BeautifulSoup获取网页内容,中文显示乱码: 解决方案: 遇到情况也是比较奇葩,利用chardet获取网页编码,然 ...
- java web 中有效解决中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别
这里先写几个大家容易搞混的编码设置代码: 在jsp代码中的头部往往有这两行代码 pageEncoding是jsp文件本身的编码contentType的charset是指服务器发送给客户端时的内容编码J ...
- Android--字符串和16进制相互转化(解决中文乱码)
import java.io.ByteArrayOutputStream; /** * Created by Administrator on 2016/2/2. * -----------16进制和 ...
- jquery插件导出excel和pdf(解决中文乱码问题)
参考文件:http://jackyrong.iteye.com/blog/2169683 https://my.oschina.net/aruan/blog/418980 https://segmen ...
- HttpServletRequest解决中文乱码的问题
HTTP请求有get和post,这两中方式解决中文乱码的方式如下: 1.Post方式请求 //这句话是设置post请求体的编码为utf-8 request.setCharacterEncoding(& ...
- java web过滤器实际应用(解决中文乱码 html标签转义功能 敏感字符过滤功能)
转载地址:http://www.cnblogs.com/xdp-gacl/p/3952405.html 在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可 ...
- Javaweb 使用Servlet技术改写用户登录 使用Filter技术解决中文乱码
先把实验3的jsp页面复制过来: WebContent->WEB-INF->lib下面的jar包8.0版本也要记得复制: Java Resources->src下的 cn.edu.h ...
随机推荐
- 栈&队列&并查集&哈希表(julyedu网课整理)
date: 2018-11-25 08:31:30 updated: 2018-11-25 08:31:30 栈&队列&并查集&哈希表(julyedu网课整理) 栈和队列 1. ...
- Google Cayley图数据库使用方法
最近在用Golang做流程引擎,对于流程图的存储,我看到了Google的Cayley图数据库,感觉它可能会比较适合我的应用,于是便拿来用了用. 项目地址在这里:https://github.com/g ...
- C语言知识点复习梳理
C语言知识点复习梳理 C语言的知识点讲完了,接下来就是做一下整理与总结,然后就会进入其他知识的学习. 本文目录如下: 基础知识. 顺序程序设计. 数据类型. 标准输入输出. 进制转换. 选择结构. 循 ...
- 云计算管理平台之OpenStack计算服务nova
一.nova简介 nova是openstack中的计算服务,其主要作用是帮助我们在计算节点上管理虚拟机的核心服务:这里的计算节点就是指用于提供运行虚拟机实例的主机,通常像这种计算节点有很多台,那么虚拟 ...
- mysql presto 函数收集
格式化日期 presto: select date_format(CURRENT_DATE - INTERVAL '1' month, '%Y-%m') mysql:date_format(DATE ...
- DLL转存为IL文件及修改后重新生成DLL文件
DLL反编译工具有:dotPeek (jetbrains) .ILSpy DLL转存IL使用:ildasm 打开DLL文件,选择file->dump. il .res重新生成DLL工具: ila ...
- STM32入门系列-存储器与寄存器介绍
介绍两部分内容: 什么是存储器映射 什么是寄存器及寄存器映射 为了让大家对存储器与寄存器有一个更清楚的认识,并且为之后使用 C 语言来访问 STM32 寄存器内容打下基础.等明白了如何使用 C 语言封 ...
- ASP.NET Core Authentication系列(二)实现认证、登录和注销
前言 在上一篇文章介绍ASP.NET Core Authentication的三个重要概念,分别是Claim, ClaimsIdentity, ClaimsPrincipal,以及claims-bas ...
- Android序列化问题与思考
今天再来谈谈Android中的对象序列化,你了解多少呢? 序列化指的是什么?有什么用 序列化指的是讲对象变成有序的字节流,变成字节流之后才能进行传输存储等一系列操作. 反序列化就是序列化的相反操作,也 ...
- Java 中数组转换为 List
目录 1 - int 型数组转换为 List 2 - List 转换为 int 型数组 3 - String 型数组转换为 List 4 - List 转换为 String 型数组 版权声明 开发中经 ...