java网络爬虫基础学习(四)
jsoup的使用
jsoup介绍
jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,css以及类似于Jquery的操作方法来取出和操作数据。
主要功能
- 从一个URL,文件或字符串中解析出HTML。
- 使用DOM或css选择器来查找、取出数据。
- 可操作HTML元素、属性、文本。
直接请求URL
一开始直接使用jsonp的connect方法调用上节说的请求电影json数据会报错

错误如下:

这里不太清楚发生错误的原因,毕竟换了一个连接变成http://www.w3school.com.cn/b.asp就可以正常输出html页面
如下

后来看了下网上,又看了看异常代码,发现是缺少contentType设置,于是加ignoreContentType(true)设置
public class Simple {
public static void main(String[] args) {
try {
Document doc = Jsoup
.connect("https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=time&page_limit=20&page_start=0")
.ignoreContentType(true).userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36")
.timeout(5000)
.get();
//Document doc1 = Jsoup
//.connect("http://www.w3school.com.cn/b.asp").get();
System.out.println(doc);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
成功

整合一下,用jsoup来抓取电影信息如下
main里运行:
public static void test2(){
try {
Response res = Jsoup
.connect("https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=time&page_limit=20&page_start=0")
.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8")
.header("Host", "movie.douban.com")
.header("Accept-Encoding", "gzip, deflate")
.header("Accept-Language","zh-cn,zh;q=0.5")
//.header("Content-Type", "application/json;charset=UTF-8")
.header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36")
.header("Connection", "keep-alive")
.header("Cache-Control", "max-age=0")
.ignoreContentType(true)
.timeout(5000)
.execute();
String body = res.body();
JSONObject jsonObject = JSONObject.parseObject(body);
JSONArray array = jsonObject.getJSONArray("subjects");
for(int i=0;i<array.size();i++){ //循环projects的json数组
JSONObject jo = array.getJSONObject(i);
Movie movie = jo.toJavaObject(Movie.class);
System.out.println(movie);
}
//System.out.println(array.get(1));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Movie.java:
public class Movie implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private String rate;
private String cover_x;
private String title;
private String url;
private String playable;
private String cover;
private String id;
private String cover_y;
private String is_new;
public Movie() {
// TODO Auto-generated constructor stub
}
public Movie(String rate, String cover_x, String title, String url, String playable, String cover, String id,
String cover_y, String is_new) {
super();
this.rate = rate;
this.cover_x = cover_x;
this.title = title;
this.url = url;
this.playable = playable;
this.cover = cover;
this.id = id;
this.cover_y = cover_y;
this.is_new = is_new;
}
public String getRate() {
return rate;
}
public void setRate(String rate) {
this.rate = rate;
}
public String getCover_x() {
return cover_x;
}
public void setCover_x(String cover_x) {
this.cover_x = cover_x;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getPlayable() {
return playable;
}
public void setPlayable(String playable) {
this.playable = playable;
}
public String getCover() {
return cover;
}
public void setCover(String cover) {
this.cover = cover;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCover_y() {
return cover_y;
}
public void setCover_y(String cover_y) {
this.cover_y = cover_y;
}
public String getIs_new() {
return is_new;
}
public void setIs_new(String is_new) {
this.is_new = is_new;
}
@Override
public String toString() {
return "Movie [评分:" + rate + ", 电影:" + title +"]";
}
}
输出

到此,简单的jsoup测试~
java网络爬虫基础学习(四)的更多相关文章
- java网络爬虫基础学习(三)
尝试直接请求URL获取资源 豆瓣电影 https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort= ...
- java网络爬虫基础学习(一)
刚开始接触java爬虫,在这里是搜索网上做一些理论知识的总结 主要参考文章:gitchat 的java 网络爬虫基础入门,好像要付费,也不贵,感觉内容对新手很友好. 一.爬虫介绍 网络爬虫是一个自动提 ...
- java网络爬虫基础学习(二)
正则表达式 正则表达式写法 含义 \d 代表0-9的任意数字 \D 代表任何非数字字符 \s 代表空格类字符 \S 代表非空格类字符 \p{Lower} 代表小写字母[a-z] \p{Upper} 代 ...
- 学 Java 网络爬虫,需要哪些基础知识?
说起网络爬虫,大家想起的估计都是 Python ,诚然爬虫已经是 Python 的代名词之一,相比 Java 来说就要逊色不少.有不少人都不知道 Java 可以做网络爬虫,其实 Java 也能做网络爬 ...
- Java网络编程基础(Netty预备知识)
今天在家休息,闲来无事,写篇博客,陶冶下情操~~~ =================我是分割线================ 最近在重新学习Java网络编程基础,以便后续进行Netty的学习. 整 ...
- Java 网络爬虫,就是这么的简单
这是 Java 网络爬虫系列文章的第一篇,如果你还不知道 Java 网络爬虫系列文章,请参看 学 Java 网络爬虫,需要哪些基础知识.第一篇是关于 Java 网络爬虫入门内容,在该篇中我们以采集虎扑 ...
- Java网络爬虫笔记
Java网络爬虫笔记 HttpClient来代替浏览器发起请求. select找到的是元素,也就是elements,你想要获取具体某一个属性的值,还是要用attr("")方法.标签 ...
- Java 网络爬虫获取网页源代码原理及实现
Java 网络爬虫获取网页源代码原理及实现 1.网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL ...
- Java网络编程和NIO详解开篇:Java网络编程基础
Java网络编程和NIO详解开篇:Java网络编程基础 计算机网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为 ...
随机推荐
- Java中char,short,int,long占几个字节和多少位
1.字节:byte:用来计量存储容量的一种计量单位:位:bit 2.一个字节等于8位 1byte = 8bit char占用的是2个字节 16位,所以一个char类型的可以存储一个汉字. 整型: b ...
- 《ECMAScript6入门》___阮一峰 笔记
let和const命令 let命令 循环体的let变量只对花括号作用域可见,花括号外不可见 循环体的语句部分是一个父作用域,而循环体内部是一个单独的子作用域 let声明的变量不存在变量提升,未声明的使 ...
- Yii2 解决2006 MySQL server has gone away问题
Yii2 解决2006 MySQL server has gone away问题 Yii2版本 2.0.15.1 php后台任务经常包含多段sql,如果php脚本执行时间较长,或者sql执行时间较长, ...
- Docker & ASP.NET Core (5):Docker Compose
第一篇:把代码连接到容器 第二篇:定制Docker镜像 第三篇:发布镜像 第四篇:容器间的连接 Docker Compose简介 Compose是一个用来定义和运行多容器Docker应用的工具.使用C ...
- 网络协议 15 - P2P 协议:小种子大学问
[前五篇]系列文章传送门: 网络协议 10 - Socket 编程(上):实践是检验真理的唯一标准 网络协议 11 - Socket 编程(下):眼见为实耳听为虚 网络协议 12 - HTTP 协议: ...
- Spring Cloud 微服务架构学习笔记与示例
本文示例基于Spring Boot 1.5.x实现,如对Spring Boot不熟悉,可以先学习我的这一篇:<Spring Boot 1.5.x 基础学习示例>.关于微服务基本概念不了解的 ...
- BaiduSpeechDemo【百度语音SDK集成】(基于v3.0.8.1)
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 上一篇集成的是V3.0.7.3版本的SDK<BaiduSpeechDemo[百度语音SDK集成](基于v3.0.7.3)> ...
- 痞子衡嵌入式:恩智浦MCU安全加密启动一站式工具NXP-MCUBootUtility用户指南
NXP MCU Boot Utility English | 中文 1 软件概览 1.1 介绍 NXP-MCUBootUtility是一个专为NXP MCU安全加密启动而设计的工具,其特性与NXP M ...
- 进阶!基于CentOS7系统使用cobbler实现单台服务器批量自动化安装不同版本系统(week3_day5_part2)-技术流ken
前言 在上一篇博文<cobbler批量安装系统使用详解-技术流ken>中已经详细讲解了cobbler的使用以及安装,本篇博文将会使用单台cobbler实现自动化批量安装不同版本的操作系统. ...
- Centos7+LVS-DR+Apache负载均衡web实验
一.简介 1.理论已经在上一篇博客简述,不了解得可以看看 https://www.cnblogs.com/zhangxingeng/p/10497279.html 2.LVS-DR优缺点复习 关于这种 ...