java网络爬虫基础学习(四)

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测试~

原文地址:https://www.cnblogs.com/fmqdblog/p/10739707.html

时间: 2024-10-09 03:20:27

java网络爬虫基础学习(四)的相关文章

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

尝试直接请求URL获取资源 豆瓣电影 https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort=time&page_limit=20&page_start=0 浏览器打开该地址: 发现是这样的 在这里我们需要用java抓取电影的信息,首先要找到资源链接,浏览器右键->检查打开谷歌调试工具 我们可以看到下图 有很多的资源请求,在这里我是一个个搜索,看那个是电影信息的Headers 发

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

刚开始接触java爬虫,在这里是搜索网上做一些理论知识的总结 主要参考文章:gitchat 的java 网络爬虫基础入门,好像要付费,也不贵,感觉内容对新手很友好. 一.爬虫介绍 网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网下载网页,是搜索引擎的重要组成部分. 传统爬虫: 获得URL ->放入队列 ->抓取网页,分析信息 ->新的URL ->放入队列 ->抓取网页,分析信息... ->满足一定条件,停止. 聚焦爬虫: 根据一定的网页分析算法过滤与主题无关的链接

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

正则表达式 正则表达式写法 含义 \d 代表0-9的任意数字 \D 代表任何非数字字符 \s 代表空格类字符 \S 代表非空格类字符 \p{Lower} 代表小写字母[a-z] \p{Upper} 代表大写字母[A-Z] \p{Alpha} 代表字母 \p{Blank} 代表空格或制表符 HTTP状态码 分类 描述 1** 信息,服务器收到请求,需要请求者继续执行操作. 2** 成功,操作被成功接收并处理. 3** 重定向,需要进一步的操作已完成请求. 4** 客户端错误,请求包含语法错误或无法

Java网络编程基础(四)---基于TCP的简单聊天系统

实现思路: 要实现消息的发送,客户端每次在连接服务器端时都需要告诉服务器自己的用户名,以便能够接收到发送给自己的消息.服务器端在接收到消息时,能够查到对应用户名的客户端,将消息发送给该客户端. 服务端需要实现多个客户端的同时请求,因此需要使用多线程来处理客户端的请求.同时,它还需要保存一份用户名列表,以便在转发消息时能够查找到对应的用户. 对于客户端来说,客户端需要能够随时收取服务器端转发来的消息,并能够随时通过键盘输入发送消息,因此它的读取消息和发送消息功能是并行的,需要独立的线程来实现. 实

Java网络编程基础(六)— 基于TCP的NIO简单聊天系统

在Java网络编程基础(四)中提到了基于Socket的TCP/IP简单聊天系统实现了一个多客户端之间护法消息的简单聊天系统.其服务端采用了多线程来处理多个客户端的消息发送,并转发给目的用户.但是由于它是基于Socket的,因此是阻塞的. 本节我们将通过SocketChannel和ServerSocketChannel来实现同样的功能. 1.客户端输入消息的格式 username:msg    username表示要发送的的用户名,msg为发送内容,以冒号分割 2.实现思路 实现思路与Java网络

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

说起网络爬虫,大家想起的估计都是 Python ,诚然爬虫已经是 Python 的代名词之一,相比 Java 来说就要逊色不少.有不少人都不知道 Java 可以做网络爬虫,其实 Java 也能做网络爬虫而且还能做的非常好,在开源社区中有不少优秀的 Java 网络爬虫框架,例如 webmagic .我的第一份正式工作就是使用 webmagic 编写数据采集程序,当时参与了一个舆情分析系统的开发,这里面涉及到了大量网站的新闻采集,我们就使用了 webmagic 进行采集程序的编写,由于当时不知道其设

java 网络爬虫框架

java 网络爬虫框架: apache Nutch ,Heritrix等,主要参照开源社区提供的40个开源项目 文章背景: 最近要写个爬虫抓去新浪微博的数据,然后用hadoop存储后,进行分析,就在网上搜取相关资料. 网友推荐使用python来做,但鉴于本人擅长的是java,学习python需要一定的时间成本,还是选择java.一开始想自己从头写,搜到apache httpClient,  后来想着还是用开源成熟的框架来做,目前觉得apache Nutch 和Heritrix是个不错的选择,不过

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

Java 网络爬虫获取网页源代码原理及实现 1.网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件. 2.那么程序获取网页的原理到底是怎么回事呢?看下面的图:客服端首先向服务器端发出Http请求,之后服务器端返回相应的结果或者请求超时客户端自己报错. 服务器端发出的Http请求,实际上说是对服务器的文件的请求

关于Java网络爬虫---模拟txt文件上传操作。

业务需求是这样的,公司400业务中客户使用的,400电话号码,可以添加多个目的码你可以理解为转接号码: 这些配置的目的码我们会在网关服务器上配置成白名单,既拥有某些权限.先提出的要求是先添加或者变动目的码要及时同步到网关. 场景: 1.我们的网关服务器接受的白名单(目的码)是已txt文件上传的,数据按照制定的格式保存在txt里面. 2.利用Java网络爬虫模拟txt文件上传.------2018-4-7现在不写了,代码在公司电脑上明天总结一下在写. 原文地址:https://www.cnblog