Xsoup 0.2.0

Xsoup 的详细介绍:请点这里

Xsoup 的下载地址:请点这里 https://github.com/code4craft/xsoup

http://www.oschina.net/question/tag/xsoup?show=hot

使用过程存在一些问题。主要问题是XPath出错定位不准确,并且其不太合理的代码结构,也难以进行定制。实现了Xsoup。Xsoup的性能比HtmlCleaner要快一倍以上。

Xsoup发展到现在,已经支持爬虫常用的语法,以下是一些已支持的语法对照表:

Name Expression Support
nodename nodename yes
immediate parent / yes
parent // yes
attribute [@key=value] yes
nth child tag[n] yes
attribute /@key yes
wildcard in tagname / yes
wildcard in attribute /[@] yes
function function() part
or a | b yes since 0.2.0
parent in path . or .. no
predicates price>35 no
predicates logic @class=a or @class=b yes since 0.2.0

定义几个很方便的XPath函数。但是请注意,这些函数式标准XPath没有的。

Expression Description XPath1.0
text(n) 第n个直接文本子节点,为0表示所有 text() only
allText() 所有的直接和间接文本子节点 not support
tidyText() 所有的直接和间接文本子节点,并将一些标签替换为换行,使纯文本显示更整洁 not support
html() 内部html,不包括标签的html本身 not support
outerHtml() 内部html,包括标签的html本身 not support
regex(@attr,expr,group) 这里@attr和group均可选,默认是group0 not support

 
 
 

xsoup0.2.0的一些XPath语法的支持。

1. contains:
//div[contains(@id,'test')]

2. 筛选条件的逻辑运算支持(and/or) #4:

//div[@id='test' or @class='test']
//div[@id='test' and @class='test']
//div[@id='test' and @class='test' or @id='test1']
//div[@id='test' and (@class='test' or @id='test1')]

3. 整个XPath的或支持 #6:

//div[@id='test']/text() | //div[@class='test']/div/text()

4. 此次升级与Xsoup 0.1.0 API兼容,WebMagic 0.3.0以上的用户可以直接在项目添加依赖即可使用新语法。

<dependency>
<groupId>us.codecraft</groupId>
<artifactId>xsoup</artifactId>
<version>0.2.0</version>
</dependency>

5. 用Jsoup 解析不到 <tr> 下面的<td> http://www.oschina.net/question/1271820_131887

得到<td></td>后在外围加上<table></table>.

6. 总结: 

css使用nth-child(n)选第几个,使用nth-last-child(n)选择倒数第n个,xpath第几个用attr[n]被黄亿华改没了
xsoup集成了css/jsoup, xpath的函数: text(n),allText(),tidyText()有换行,html()不含标签本身,outerHtml()含标签本身,regex(@attr,expr,group)前两个可选,,,,
xsoup集成了css/jsoup, xpath的语法: tag[n], function(), a|b, @class=a or @class=b
xsoup不支持的: .or..不支持, price>35也不支持,  
xpath用text()选文本,css用innerHtml,text,allText选文本,如:css(String Selector, "text").toString;

7. xpath模糊匹配:

所有的属性选择器都被写成和XPath极其相似(因为所有的属性都以@符号开始)。
    E[@foo] 拥有foo属性的E元素
    E[@foo=bar] foo属性的值为bar的E元素
    E[@foo^=bar] foo属性的值以字符串"bar"开始的E元素
    E[@foo$=bar] foo属性的值以字符串"bar"结尾的E元素
    E[@foo*=bar] foo属性的值包含有字符串"bar"结尾的E元素  

8.  无属性的<tr>和<tr class='time'>的区分:

tr[@class!='time']

9.xpath其它

html.xpath("/a[@href]/@href") 和 html.xpath("/a/@href'"),  前者只取含href属性的标签, 后者不限定是否含href标签.
 
10. xpath其它2
html.xpath("//div[@class='tBorderTop_box']").all();会匹配到class='tBorderTop_box'和class='tBorderTop_box bt'两种结果,html.xpath("//div[@class$='tBorderTop_box']").all(

xpath带空格的属性值必须要打上小括号,否则出错;相反,css带空格的不能打小括号,否则出错。
 
11.

同一个网站每一个request的header不同,在每一个request中添加header,修改Request类,覆盖掉全局site的header。

12.延时使用同一参数,过大速度会变慢很多。
.setConnectionRequestTimeout(site.getTimeOut())
.setSocketTimeout(site.getTimeOut())
.setConnectTimeout(site.getTimeOut())



xsoup,Jsoup的更多相关文章

  1. Xsoup 是一款基于 Jsoup 开发的

    Xsoup 是一款基于Jsoup 开发的,使用XPath抽取Html元素的工具.它被用于作者的爬虫框架 WebMagic 中,进行XPath 解析和抽取. 此次更新主要增加了一些XPath语法的支持. ...

  2. Jsoup问题---获取http协议请求失败 org.jsoup.UnsupportedMimeTypeException: Unhandled content type. Must be text/*, application/xml, or application/xhtml+xml.

    Jsoup问题---获取http协议请求失败 1.问题:用Jsoup在获取一些网站的数据时,起初获取很顺利,但是在访问某浪的数据是Jsoup报错,应该是请求头里面的请求类型(ContextType)不 ...

  3. Jsoup系列学习(2)-解析html文件

    解析html文件 1.当我们通过发送http请求时,有时候返回结果是一个html格式字符串,你需要从一个网站获取和解析一个HTML文档,并查找其中的相关数据.你可以使用下面解决方法: 使用 Jsoup ...

  4. Jsoup系列学习(1)-发送get或post请求

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

  5. 使用 jsoup 对 HTML 文档进行解析和操作

    jsoup 简介 Java 程序在解析 HTML 文档时,相信大家都接触过 htmlparser 这个开源项目,我曾经在 IBM DW 上发表过两篇关于 htmlparser 的文章,分别是:从 HT ...

  6. jsoup获取图片示例

    import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.Inp ...

  7. jsoup获取文档类示例

    import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsou ...

  8. Jsoup解析html终于成功了!!!

    package com.eric.pickupjoke.activity; import java.io.IOException; import java.io.InputStream; import ...

  9. Jsoup做接口测试

    最早用Jsoup是有一个小的爬虫应用要写,发现Jsoup较HttpClient轻便多了,API也方便易懂,上手很快,对于response的Document解析的选择器用的是cssSelector(Jq ...

随机推荐

  1. 从C++对象内存布局和构造过程来具体分析C++中的封装、继承、多态

    一.封装模型的内存布局 常见类对象的成员可能包含以下元素: 内建类型.指针.引用.组合对象.虚函数. 另一个角度的分类: 数据成员:静态.非静态 成员函数:静态.非静态.虚函数 1.仅包含内建类型的场 ...

  2. iis7.0/8.0rewrite规则

    首先在网站 web.config 配置文件的 configuration 节点中加入如下代码: <system.webServer> <rewrite> <rules&g ...

  3. php的cURL库介绍

    cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.很多小偷程序都是使用这个函数.最爽的是,PHP也支持 cURL 库.本文将介绍 cURL 的 ...

  4. 加载loading的ajax写法

    ajaxStart()与ajaxStop():当Ajax请求开始时,会触发ajaxStart()方法的回调函数.当Ajax请求结束时,会触发ajaxStop()方法的回调函数.这些方法都是全局的方法, ...

  5. frame,iframe,frameset用法和区别

    ■ 框架概念 : 所谓框架便是网页画面分成几个框窗,同时取得多个 URL.只需要 <FRAMESET> <FRAME> 即可,而所有框架标记需要放在一个总起的 html 档,这 ...

  6. Stream与byte转换

    将 Stream 转成 byte[] /// <summary> /// 将 Stream 转成 byte[] /// </summary> public byte[] Str ...

  7. Linux----mktemp命令的用法

    命令说明: mktemp命令用于临时文件和临时目录.它的主要特点就是可以做到每次执行mktemp时产生文件和目录都不重名: 这个特性就保证了多个session执行同一脚本都是安全的. 命令用法: 格式 ...

  8. [Drools]JAVA规则引擎 -- Drools 2

    上一篇文章 http://blog.csdn.net/quzishen/archive/2011/01/25/6163012.aspx 描述了一些常用的drools的语法标签和一个模拟实例即发送积分的 ...

  9. C语言入门(4)——常量、变量与赋值

    对于基本数据类型量,按其取值是否可改变又分为常量和变量两种.在程序执行过程中,其值不发生改变的量称为常量,其值可变的量称为变量.它们可与数据类型结合起来分类. 常量 常量有字符常量(Character ...

  10. iOS 数组里面取字典的值

    NSArray *arrData = @[@"1",@"2",@"3",@"4"]; NSArray *arrKey = ...