Java爬虫技术

257次阅读
没有评论

    Jsoup解析html方法,通常被人称之为爬虫技术。(个人认为可能是返回的数据,只有一小部分是我们需要的,造成了数据

的冗余,和网络延迟)。

1,下载Jsoup架包,小编在网上找了一个资源下载jsoup架包。(添加到libs后,add to path,其中jsoup-1.9.2-sources.jar的

作用是,当我们需要查看源码的时候,指定到这个包就可以了)

Java爬虫技术Java爬虫技术

2,Jsoup的应用Api

      2.1生成Document文件(本身继承Element)。

      A,html字符串转换成一个Document对象:

String html = “<html><head><title>First parse</title></head>” + “<body><p>Parsed HTML into a doc.</p></body></html>”; Document doc = Jsoup.parse(html);      B,将一个网页html转换成一个Document对象。(常用的两种方法)     

Document doc1 = Jsoup.parse(new URL(“http://www.baidu.com”), 5000); Document doc = Jsoup.connect(“http://jingyan.baidu.com/article/e2284b2b60aceee2e6118d3b.html”).get();//也有post方法,基本雷同      C,将本地的一个html文件,转换成一个Document对象。

File file = new File(“C:/Users/songbinwang/webspace/web/WebContent/index/index.html”); Document doc1 = Jsoup.parse(file, “UTF-8”);
       2.2,遍历一个文档Document。

       A,DOM方法

查找元素

元素数据

       B,选择器语法查找数据(其实如果只是抓取数据,掌握前面几种就够用了,但小编还是全粘贴了出来,万一真用上了呢哈)

Selector选择器概述

  • tagname: 通过标签查找元素,比如:a
  • ns|tag: 通过标签在命名空间查找元素,比如:可以用 fb|name 语法来查找 <fb:name> 元素
  • #id: 通过ID查找元素,比如:#logo
  • .class: 通过class名称查找元素,比如:.masthead
  • [attribute]: 利用属性查找元素,比如:[href]
  • [^attr]: 利用属性名前缀来查找元素,比如:可以用[^data-] 来查找带有HTML5 Dataset属性的元素
  • [attr=value]: 利用属性值来查找元素,比如:[width=500]
  • [attr^=value], [attr$=value], [attr*=value]: 利用匹配属性值开头、结尾或包含属性值来查找元素,比如:[href*=/path/]
  • [attr~=regex]: 利用属性值匹配正则表达式来查找元素,比如: img[src~=(?i)\.(png|jpe?g)]
  • *: 这个符号将匹配所有元素

Selector选择器组合使用

  • el#id: 元素+ID,比如: div#logo
  • el.class: 元素+class,比如: div.masthead
  • el[attr]: 元素+class,比如: a[href]
  • 任意组合,比如:a[href].highlight
  • ancestor child: 查找某个元素下子元素,比如:可以用.body p 查找在”body”元素下的所有p元素
  • parent > child: 查找某个父元素下的直接子元素,比如:可以用div.content > p 查找 p 元素,也可以用body > * 查找body标签下所有直接子元素
  • siblingA + siblingB: 查找在A元素之前第一个同级元素B,比如:div.head + div
  • siblingA ~ siblingX: 查找A元素之前的同级X元素,比如:h1 ~ p
  • el, el, el:多个选择器组合,查找匹配任一选择器的唯一元素,例如:div.masthead, div.logo

伪选择器selectors

  • :lt(n): 查找哪些元素的同级索引值(它的位置在DOM树中是相对于它的父节点)小于n,比如:td:lt(3) 表示小于三列的元素
  • :gt(n):查找哪些元素的同级索引值大于n,比如: div p:gt(2)表示哪些div中有包含2个以上的p元素
  • :eq(n): 查找哪些元素的同级索引值与n相等,比如:form input:eq(1)表示包含一个input标签的Form元素
  • :has(seletor): 查找匹配选择器包含元素的元素,比如:div:has(p)表示哪些div包含了p元素
  • :not(selector): 查找与选择器不匹配的元素,比如: div:not(.logo) 表示不包含 class=logo 元素的所有 div 列表
  • :contains(text): 查找包含给定文本的元素,搜索不区分大不写,比如: p:contains(jsoup)
  • :containsOwn(text): 查找直接包含给定文本的元素
  • :matches(regex): 查找哪些元素的文本匹配指定的正则表达式,比如:div:matches((?i)login)
  • :matchesOwn(regex): 查找自身包含文本匹配指定正则表达式的元素

      2.3,从元素中抽取属性,文本和html。

3,Jsoup应用实例:

实例一:

try { Document doc = Jsoup.connect(“http://www.baidu.com”).get(); System.out.println(“Document:\n” + doc);//打印整个百度首页的html Element form = doc.getElementById(“form”);//通过id找到元素form System.out.println(“form:\n” + form); Elements es = form.getAllElements(); System.out.println(“Elements:”); for(Element e: es){//遍历整个元素 System.out.println(“tag:”+e.tagName() + “,type:”+e.attr(“type”)+”,name:”+e.attr(“name”) + “,value:”+e.attr(“value”)); } } catch (Exception e) { // TODO: handle exception }
实例二:

try { Document doc = Jsoup.connect(“http://www.baidu.com”).get(); System.out.println(doc); // Element form = doc.select(“form[name]”).first(); Element form = doc.select(“#form”).first(); System.out.println(form); // Elements es = doc.select(“.s_ipt”); // Elements es = doc.select(“[^hr]”); // System.out.println(es); // Elements es = form.getAllElements(); // for(Element e: es){ // System.out.println(“tag:”+e.tagName() + “,type:”+e.attr(“type”)+”,name:”+e.attr(“name”) + “,value:”+e.attr(“value”)); // } Element img = doc.select(“img”).first(); System.out.println(img.attr(“abs:src”));//获得绝对地址 } catch (Exception e) { // TODO: handle exception }
由于篇幅原因,只给出实例一的结果(相信大家多试几遍,很快就能掌握的):

Document:
<!doctype html>
<!–STATUS OK–>
<html>
 <head>
  <meta http-equiv=”content-type” content=”text/html;charset=utf-8″>
  <meta http-equiv=”X-UA-Compatible” content=”IE=Edge”>
  <meta content=”always” name=”referrer”>
  <link rel=”stylesheet” type=”text/css” href=”http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css”>
  <title>百度一下,你就知道</title>
 </head> 
 <body link=”#0000cc”> 
  <div id=”wrapper”> 
   <div id=”head”> 
    <div class=”head_wrapper”> 
     <div class=”s_form”> 
      <div class=”s_form_wrapper”> 
       <div id=”lg”> 
        <img hidefocus=”true” src=”//www.baidu.com/img/bd_logo1.png” width=”270″ height=”129″> 
       </div> 
       <form id=”form” name=”f” action=”//www.baidu.com/s” class=”fm”> 
        <input type=”hidden” name=”bdorz_come” value=”1″> 
        <input type=”hidden” name=”ie” value=”utf-8″> 
        <input type=”hidden” name=”f” value=”8″> 
        <input type=”hidden” name=”rsv_bp” value=”1″> 
        <input type=”hidden” name=”rsv_idx” value=”1″> 
        <input type=”hidden” name=”tn” value=”baidu”>
        <span class=”bg s_ipt_wr”><input id=”kw” name=”wd” class=”s_ipt” value maxlength=”255″ autocomplete=”off” autofocus></span>
        <span class=”bg s_btn_wr”><input type=”submit” id=”su” value=”百度一下” class=”bg s_btn”></span> 
       </form> 
      </div> 
     </div> 
     <div id=”u1″> 
      <a href=”http://news.baidu.com” name=”tj_trnews” class=”mnav”>新闻</a> 
      <a href=”http://www.hao123.com” name=”tj_trhao123″ class=”mnav”>hao123</a> 
      <a href=”http://map.baidu.com” name=”tj_trmap” class=”mnav”>地图</a> 
      <a href=”http://v.baidu.com” name=”tj_trvideo” class=”mnav”>视频</a> 
      <a href=”http://tieba.baidu.com” name=”tj_trtieba” class=”mnav”>贴吧</a> 
      <noscript> 
       <a href=”http://www.baidu.com/bdorz/login.gif?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1″ name=”tj_login” class=”lb”>登录</a> 
      </noscript> 
      <script>document.write(‘<a href=”http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=’+%20encodeURIComponent(window.location.href+%20(window.location.search%20===%20″” ? “?” : “&”)+ “bdorz_come=1″)+ ‘” name=”tj_login” class=”lb”>登录</a>’);</script> 
      <a href=”//www.baidu.com/more/” name=”tj_briicon” class=”bri” style=”display: block;”>更多产品</a> 
     </div> 
    </div> 
   </div> 
   <div id=”ftCon”> 
    <div id=”ftConw”> 
     <p id=”lh”> <a href=”http://home.baidu.com”>关于百度</a> <a href=”http://ir.baidu.com”>About Baidu</a> </p> 
     <p id=”cp”>©2016&nbsp;Baidu&nbsp;<a href=”http://www.baidu.com/duty/”>使用百度前必读</a>&nbsp; <a href=”http://jianyi.baidu.com/” class=”cp-feedback”>意见反馈</a>&nbsp;京ICP证030173号&nbsp; <img src=”//www.baidu.com/img/gs.gif”> </p> 
    </div> 
   </div> 
  </div>   
 </body>
</html>
form:
<form id=”form” name=”f” action=”//www.baidu.com/s” class=”fm”> 
 <input type=”hidden” name=”bdorz_come” value=”1″> 
 <input type=”hidden” name=”ie” value=”utf-8″> 
 <input type=”hidden” name=”f” value=”8″> 
 <input type=”hidden” name=”rsv_bp” value=”1″> 
 <input type=”hidden” name=”rsv_idx” value=”1″> 
 <input type=”hidden” name=”tn” value=”baidu”>
 <span class=”bg s_ipt_wr”><input id=”kw” name=”wd” class=”s_ipt” value maxlength=”255″ autocomplete=”off” autofocus></span>
 <span class=”bg s_btn_wr”><input type=”submit” id=”su” value=”百度一下” class=”bg s_btn”></span> 
</form>
Elements:
tag:form,type:,name:f,value:
tag:input,type:hidden,name:bdorz_come,value:1
tag:input,type:hidden,name:ie,value:utf-8
tag:input,type:hidden,name:f,value:8
tag:input,type:hidden,name:rsv_bp,value:1
tag:input,type:hidden,name:rsv_idx,value:1
tag:input,type:hidden,name:tn,value:baidu
tag:span,type:,name:,value:
tag:input,type:,name:wd,value:
tag:span,type:,name:,value:
tag:input,type:submit,name:,value:百度一下

神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:Python教程2022-10-24发表,共计7526字。
新手QQ群:570568346,欢迎进群讨论 Python51学习