jsoup的使用

jsoup介绍

  jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,css以及类似于Jquery的操作方法来取出和操作数据。

主要功能

  1. 从一个URL,文件或字符串中解析出HTML。
  2. 使用DOM或css选择器来查找、取出数据。 
  3. 可操作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网络爬虫基础学习(四)的更多相关文章

  1. java网络爬虫基础学习(三)

    尝试直接请求URL获取资源 豆瓣电影 https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort= ...

  2. java网络爬虫基础学习(一)

    刚开始接触java爬虫,在这里是搜索网上做一些理论知识的总结 主要参考文章:gitchat 的java 网络爬虫基础入门,好像要付费,也不贵,感觉内容对新手很友好. 一.爬虫介绍 网络爬虫是一个自动提 ...

  3. java网络爬虫基础学习(二)

    正则表达式 正则表达式写法 含义 \d 代表0-9的任意数字 \D 代表任何非数字字符 \s 代表空格类字符 \S 代表非空格类字符 \p{Lower} 代表小写字母[a-z] \p{Upper} 代 ...

  4. 学 Java 网络爬虫,需要哪些基础知识?

    说起网络爬虫,大家想起的估计都是 Python ,诚然爬虫已经是 Python 的代名词之一,相比 Java 来说就要逊色不少.有不少人都不知道 Java 可以做网络爬虫,其实 Java 也能做网络爬 ...

  5. Java网络编程基础(Netty预备知识)

    今天在家休息,闲来无事,写篇博客,陶冶下情操~~~ =================我是分割线================ 最近在重新学习Java网络编程基础,以便后续进行Netty的学习. 整 ...

  6. Java 网络爬虫,就是这么的简单

    这是 Java 网络爬虫系列文章的第一篇,如果你还不知道 Java 网络爬虫系列文章,请参看 学 Java 网络爬虫,需要哪些基础知识.第一篇是关于 Java 网络爬虫入门内容,在该篇中我们以采集虎扑 ...

  7. Java网络爬虫笔记

    Java网络爬虫笔记 HttpClient来代替浏览器发起请求. select找到的是元素,也就是elements,你想要获取具体某一个属性的值,还是要用attr("")方法.标签 ...

  8. Java 网络爬虫获取网页源代码原理及实现

    Java 网络爬虫获取网页源代码原理及实现 1.网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL ...

  9. Java网络编程和NIO详解开篇:Java网络编程基础

    Java网络编程和NIO详解开篇:Java网络编程基础 计算机网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为 ...

随机推荐

  1. linux用curl发送post请求

    1.curl -X POST “http://XXXXXXX”这种请求方式参数直接写在URL里面的,而不是body

  2. Windows系统配置OutLook邮箱教程一

    本示例演示Windows系统中OutLook邮箱设置 1.打开控制面板->类型选择小图标->找到Mail(Microsoft OutLook 2016). 2.鼠标左键双击Mail. 3. ...

  3. Linux 桌面玩家指南:01. 玩转 Linux 系统的方法论

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  4. AutoHotkey 自动化脚本工具实例

    AHK 自动按键工具 https://www.autohotkey.com/ 可实现功能 快捷键 启动 浏览器.CMD命令.弹出框 可定时执行任务 可改键 将A与B互换 可快捷替换字符串 测试如下: ...

  5. 新DevOps八荣八耻

    昀哥 20181001以随时可扩容可缩容可重启可切换机房流量为荣,以不能迁移为耻. 以可配置为荣,以硬编码为耻. 以系统互备为荣,以系统单点为耻. 以交付时有监控报警为荣,以交付裸奔系统为耻. 以无状 ...

  6. 常用Latex公式

    注意: 1 在博客中书写Latex公式时,需在公式两侧用$包括 2 大括号{ }在Latex有本身的含义,如果要输出为普通字符需要使用\{...\} 符号 公式 说明 $ \in $ \in 包含 $ ...

  7. 【朝花夕拾】四大组件之(一)Broadcast篇

    前言 笔者最近在探究ANR及源码的过程中,发现对Broadcast的一些应用层面上的知识有的感觉比较生疏,有的记忆不准确,有的认识不完整.所谓“基础不牢,地动山摇”,于是就梳理了一下Broadcast ...

  8. Asp.Net Core 轻松学-利用 Swagger 自动生成接口文档

    前言     目前市场上主流的开发模式,几乎清一色的前后端分离方式,作为服务端开发人员,我们有义务提供给各个客户端良好的开发文档,以方便对接,减少沟通时间,提高开发效率:对于开发人员来说,编写接口文档 ...

  9. 深入理解Linux内核 学习笔记(3)

    第三章 进程 可以看到很多熟悉的结构体 进程状态: 可运行状态(TASK_ RUNNING) 进程要么在CPU上执行,要么准备执行. 可巾断的等待状态(TASK_ INTERRUPTIBLE) 进程被 ...

  10. js 实现 复制 功能 (zeroclipboard)

    #复制功能因访问权限和安全问题, 被浏览器禁了# 我要实现的功能:点击复制按钮,复制浏览器的当前页面地址,加上用户选择的参数(用户查找过滤),直接将该链接发给别人,点击打开就是对应的查找结果而不是默认 ...