网络爬虫jsoup抓取网页数据使用详解

JAVA herman 3039浏览 0评论
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog,发送下载链接帮助你免费下载!
本博客日IP超过1800,PV 2600 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog,之前的微信号好友位已满,备注:返现
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领

Java程序在解析HTML文档时,我们常常使用jsoup去解析HTML网页内容。但在jsoup之前我们使用HTMLParser去解析(HTMLParser学习地址:http://www.xttblog.com/?p=322),但现在我已经不再使用htmlparser了,原因是htmlparser很少更新,最重要的是有了jsoup 。
jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。
jsoup 的主要功能如下:
1. 从一个 URL,文件或字符串中解析 HTML;
2. 使用 DOM 或 CSS 选择器来查找、取出数据;
3. 可操作 HTML 元素、属性、文本;

jsoup的类层次结构

根据它的结构图,我们可以很快的写出解析代码,下面列举常用的3中解析加载html的方式:

	//解析html格式的字符串

	String html = "<html><head><title>业余草</title></head><body><p>网络爬虫jsoup抓取网页数据使用详解</p></body></html>"; 

	Document doc = Jsoup.parse(html); 

	//根据域名get方式直接加载并解析HTML文档

	Document doc = Jsoup.connect("http://www.xttblog.com").get(); 

	String title = doc.title(); 

	//post+参数提交的方式解析远程HTML文档

	Document doc = Jsoup.connect("http://www.xttblog.com") 

	  .data("xttblog","jsoup") //请求参数

	  .userAgent("业余草") //设置User-Agent 

	  .cookie("userid", "xttblog") //设置cookie 

	  .timeout(3000) //设置连接超时时间

	  .post(); //使用POST方法访问URL 

	//从文件中加载HTML文档

	File input = new File("C:/xttblog.html"); 

	Document doc = Jsoup.parse(input,"UTF-8","http://www.xttblog.com");

jsoup最强大的地方是它提供了非常强大的查询方法,采用类似jquery选择器(selector)语法来处理HTML文档中的数据。选择器主要匹配方式如下:
基本查询方法
    Tagname:通过标签查找元素(例如:a)
    ns|tag:通过标签在命名空间查找元素,例如:fb|name查找<fb:name>元素
    #id:通过ID查找元素,例如#logo
    .class:通过类型名称查找元素,例如.masthead
    [attribute]:带有属性的元素,例如[href]
    [^attr]:带有名称前缀的元素,例如[^data-]查找HTML5带有数据集(dataset)属性的元素
    [attr=value]:带有属性值的元素,例如[width=500]
    [attr^=value],[attr$=value],[attr*=value]:包含属性且其值以value开头、结尾或包含value的元素,例如[href*=/path/]
    [attr~=regex]:属性值满足正则表达式的元素,例如img[src~=(?i)\.(png|jpe?g)]
    *:所有元素,例如*
选择器组合方法
    el#id:带有ID的元素ID,例如div#logo
    el.class:带类型的元素,例如. div.masthead
    el[attr]:包含属性的元素,例如a[href]
    任意组合:例如a[href].highlight
    ancestor child:继承自某祖(父)元素的子元素,例如.body p查找“body”块下的p元素
    parent > child:直接为父元素后代的子元素,例如: div.content > pf查找p元素,body > * 查找body元素的直系子元素
    siblingA + siblingB:查找由同级元素A前导的同级元素,例如div.head + div
    siblingA ~ siblingX:查找同级元素A前导的同级元素X例如h1 ~ p
    el, el, el:多个选择器组合,查找匹配任一选择器的唯一元素,例如div.masthead, div.logo
伪选择器(Pseudo selectors)
    :lt(n):查找索引值(即DOM树中相对于其父元素的位置)小于n的同级元素,例如td:lt(3)
    :gt(n):查找查找索引值大于n的同级元素,例如div p:gt(2)
    :eq(n) :查找索引值等于n的同级元素,例如form input:eq(1)
    :has(seletor):查找匹配选择器包含元素的元素,例如div:has(p)
    :not(selector):查找不匹配选择器的元素,例如div:not(.logo)
    :contains(text):查找包含给定文本的元素,大小写铭感,例如p:contains(jsoup)
    :containsOwn(text):查找直接包含给定文本的元素
    :matches(regex):查找其文本匹配指定的正则表达式的元素,例如div:matches((?i)login)
    :matchesOwn(regex):查找其自身文本匹配指定的正则表达式的元素
注意:上述伪选择器是0-基数的,亦即第一个元素索引值为0,第二个元素index为1等
原文地址:http://www.xttblog.com/?p=326

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加QQ1群:135430763(2000人群已满),QQ2群:454796847(已满),QQ3群:187424846(已满)。QQ群进群密码:xttblog,想加微信群的朋友,之前的微信号好友已满,请加博主新的微信号:xttblog,备注:“xttblog”,添加博主微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

本文原文出处:业余草: » 网络爬虫jsoup抓取网页数据使用详解