美文网首页
源码时代教教你:Java爬虫(1)-Jsoup的入门

源码时代教教你:Java爬虫(1)-Jsoup的入门

作者: 源码时代官方 | 来源:发表于2020-12-01 10:05 被阅读0次

    1. 网络爬虫概述

    1.1. 什么是爬虫

    简单的说,网络爬虫就是使用程序模拟人浏览网页的行为,并把看到的数据采集并整理下来。 从功能上讲,爬虫程序一般分为三个步骤,采集,处理,存储。爬虫从一个或若干初始网页的URL开始,获得原始页面数据;针对页面内容进行分析并筛选页面的有效数据;把数据整理并持久化。

    1.2. 爬虫的作用

    搜索引擎:爬虫自动地采集互联网中的信息,采集回来后进行相应的存储或处理,在需要检索某些信息的时候,只需在采集回来的信息中进行检索,即实现了私人的搜索引擎。当然还需要有其他技术的支持,爬虫只是解决原始数据问题。

    数据对比:例如很多商品在各大电商网站的平台上都有出售。可能每个平台的零售价都不一样,那么就可以获取每个电商网站的商品售价数据。类似的应用场景还非常多,例如收集招聘信息,收集音视频网站即将下架的影视作品。

    写在最后:本文仅仅致力于技术方面的研究。对于爬虫的应用需要注意相关的法律法规。

    2. 程序入门

    2.1. 爬取数据的原理

    以前是使用浏览器获取页面数据,使用爬虫就是模拟人打开浏览器访问服务器的过程。程序获取数据以后对页面数据进行分析并解析存储。

    image

    2.2. 获取页面数据

    对于数据的获取此处建议使用HttpClient技术,它实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)、支持自动转向、支持 HTTPS 协议、支持代理服务器、支持Cookie。

    相关依赖

    |

    <dependency>

        <groupId>org.apache.httpcomponents</groupId>
    
        <artifactId>httpclient</artifactId>
    
        <version>4.5.3</version>
    

    </dependency>

    <dependency>

    <groupId>org.slf4j</groupId>

    <artifactId>slf4j-log4j12</artifactId>

    <version>1.7.25</version>

    </dependency>

    <dependency>

    <groupId>org.apache.commons</groupId>

    <artifactId>commons-lang3</artifactId>

    <version>3.3.2</version>

    </dependency>

    <dependency>

    <groupId>commons-io</groupId>

    <artifactId>commons-io</artifactId>

    <version>2.6</version>

    </dependency>

    <dependency>

    <groupId>org.jsoup</groupId>

    <artifactId>jsoup</artifactId>

    <version>1.10.3</version>

    </dependency>

    |

    获取数据:

    |

       public static void main(String[] args) throws Exception {
    

    // 创建HttpClient

    CloseableHttpClient httpClient = HttpClients.createDefault();

    // 声明HttpGet请求对象

    // http://www.oschina.net/p/httpclient

    HttpGet httpGet = new HttpGet("https://www.zhipin.com/job_detail/43d2cafabb881ee83nd90ty1E1M~.html");

    // 设置请求头包含User-Agent

    httpGet.setHeader("User-Agent", "");

    // 使用HttpClient发请求,会返回response

    CloseableHttpResponse response = httpClient.execute(httpGet);

    // 判断响应状态码是否是200

    if (response.getStatusLine().getStatusCode() == 200) {

    // 判断是否有返回数据

    if (response.getEntity() != null) {

    // 如果是200,则请求成功,解析返回的数据

    String html = EntityUtils.toString(response.getEntity(), "UTF-8");

    // 把结果输出到文件

    // 第一个参数是输出的文件,第二个参数是输出的内容,第二个参数是编码

    FileUtils.writeStringToFile(new File("C:/Users/tree/Desktop/test.html"), html, "UTF-8");

    // 解析页面打印文档

    System.out.println(

    StringUtils.substringBetween(html,"<div class="job-sec">", "</div>"));

    }

    }

    }

    |

    3. Jsoup解析

    3.1. 什么是Jsoup

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

    3.2. 常用的API

    参考文档:<u style="background-position: center center; background-repeat: no-repeat; margin: 0px; padding: 0px;">https://www.open-open.com/jsoup/dom-navigation.htm</u>

    3.2.1. 查找元素

    · getElementById(String id)

    · getElementsByTag(String tag)

    · getElementsByClass(String className)

    · getElementsByAttribute(String key) (and related methods)

    · Element siblings: siblingElements(), firstElementSibling(), lastElementSibling();nextElementSibling(), previousElementSibling()

    · Graph: parent(), children(), child(int index)

    3.2.2. 元素数据

    · attr(String key)获取属性attr(String key, String value)设置属性

    · attributes()获取所有属性

    · id(), [className()](https://www.itsource.cn/web/news/2771.html#className() "Gets the literal value of this element's ") and classNames()

    · text()获取文本内容text(String value) 设置文本内容

    · html()获取元素内HTMLhtml(String value)设置元素内的HTML内容

    · outerHtml()获取元素外HTML内容

    · data()获取数据内容(例如:script和style标签)

    · tag() and tagName()

    3.2.3. 操作HTML和文本

    · append(String html), prepend(String html)

    · appendText(String text), prependText(String text)

    · appendElement(String tagName), prependElement(String tagName)

    · html(String value)

    3.3. 解析数据

    image

    从刚刚下载的test.html中解析数据

    |

    public static void main(String[] args) throws Exception {

    Document doc = Jsoup.parse(new File("C:/Users/tree/Desktop/test.html"), "UTF-8");

    // 使用dom方式获取数据

    Element element = doc.getElementsByClass("job-sec").child(0);

    System.out.println(element.text());

    }

    |

    相关文章

      网友评论

          本文标题:源码时代教教你:Java爬虫(1)-Jsoup的入门

          本文链接:https://www.haomeiwen.com/subject/evbjwktx.html