xsoup,Jsoup
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标签.
html.xpath("//div[@class='tBorderTop_box']").all();会匹配到class='tBorderTop_box'和class='tBorderTop_box bt'两种结果,html.xpath("//div[@class$='tBorderTop_box']").all( xpath带空格的属性值必须要打上小括号,否则出错;相反,css带空格的不能打小括号,否则出错。
同一个网站每一个request的header不同,在每一个request中添加header,修改Request类,覆盖掉全局site的header。
12.延时使用同一参数,过大速度会变慢很多。
.setConnectionRequestTimeout(site.getTimeOut())
.setSocketTimeout(site.getTimeOut())
.setConnectTimeout(site.getTimeOut())
xsoup,Jsoup的更多相关文章
- Xsoup 是一款基于 Jsoup 开发的
Xsoup 是一款基于Jsoup 开发的,使用XPath抽取Html元素的工具.它被用于作者的爬虫框架 WebMagic 中,进行XPath 解析和抽取. 此次更新主要增加了一些XPath语法的支持. ...
- Jsoup问题---获取http协议请求失败 org.jsoup.UnsupportedMimeTypeException: Unhandled content type. Must be text/*, application/xml, or application/xhtml+xml.
Jsoup问题---获取http协议请求失败 1.问题:用Jsoup在获取一些网站的数据时,起初获取很顺利,但是在访问某浪的数据是Jsoup报错,应该是请求头里面的请求类型(ContextType)不 ...
- Jsoup系列学习(2)-解析html文件
解析html文件 1.当我们通过发送http请求时,有时候返回结果是一个html格式字符串,你需要从一个网站获取和解析一个HTML文档,并查找其中的相关数据.你可以使用下面解决方法: 使用 Jsoup ...
- Jsoup系列学习(1)-发送get或post请求
简介 jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据. 官 ...
- 使用 jsoup 对 HTML 文档进行解析和操作
jsoup 简介 Java 程序在解析 HTML 文档时,相信大家都接触过 htmlparser 这个开源项目,我曾经在 IBM DW 上发表过两篇关于 htmlparser 的文章,分别是:从 HT ...
- jsoup获取图片示例
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.Inp ...
- jsoup获取文档类示例
import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsou ...
- Jsoup解析html终于成功了!!!
package com.eric.pickupjoke.activity; import java.io.IOException; import java.io.InputStream; import ...
- Jsoup做接口测试
最早用Jsoup是有一个小的爬虫应用要写,发现Jsoup较HttpClient轻便多了,API也方便易懂,上手很快,对于response的Document解析的选择器用的是cssSelector(Jq ...
随机推荐
- (转载)JS中的prototype
原文地址:http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html#!comments JS中的phototype是JS中比较难理解的 ...
- jQuery简单前端表单验证
<!DOCTYPE html> <html> <head> <title>表单验证</title> <script src=" ...
- APサーバ
GlassFish GlassFish 是一款强健的商业兼容应用服务器,达到产品级质量,可免费用于开发.部署和重新分发. 简介 GlassFish 是用于构建 Java EE 5应用服务器的开源开发项 ...
- git彻底删除commit记录的方法
在github上,如果非默认分支的话,直接用以下方法: git reset --hard <commit_id> git push origin HEAD --force 如是默认分支,需 ...
- smtp cmd 测试 smtp发送邮件 cmd发送邮件
无账户MAIL FROM:<test@rmvbdy.com>RCPT TO:2850965781@qq.comDATASubject: test messagetest body . 有账 ...
- 浅析指针(pointer)与引用(reference)
在c++函数中,形式参数用引用和用指针都可以起到在被调用函数中改变调用函数的变量的作用.什么时候用引用作参数?什么时候用指针作参数呢 void function (int *ptr); void fu ...
- flash跨域策略文件crossdomain.xml
flash在跨域时唯一的限制策略就是crossdomain.xml文件,该文件限制了flash是否可以跨域读写数据以及允许从什么地方跨域读写数据. 位于www.a.com域中的SWF文件要访问www. ...
- uestc 10 In Galgame We Trust
题意:求最长的合法括号序列 解:栈+分类讨论 now表示已经算出的序列,且此序列与现在扫描的序列可能能够连接,tmp表示现在扫描到的序列长度 左括号入栈 右括号:1.栈空时:统计当前总长 并且将栈,n ...
- English - 英文写作中的最常见“十大句式”
英文写作中的最常见“十大句式” from 小木虫论坛 一.否定句 许多否定句不含not的否定结构.如果论文作者能正确使用他们,就会增加写作的闪光点,使文章显得生动活泼. 1.Instead of in ...
- Javascript知识四(DOM)
[箴 10:4] 手懒的,要受贫穷:手勤的,却要富足. He becometh poor that dealeth with a slack hand: but the hand of the di ...