对于垂直搜索,经常需要在专一领域的网站上抓取信息,这些网站上的垂直资源往往有特定的html结构,html为xml规范的文档,撷取这类文档的方式有很多,xpath相对比较方便操作,通常会用xpath去将抓取下来的网页进行进一步的资源提取。
常用定位语句实例
-
//NODE[not(@class)] 所有节点名为node,且不包含class属性的节点
-
//NODE[ @class and @id] 所有节点名为node,且同时包含class属性和id属性的节点
-
//NODE[contains(text(),substring] 所有节点名为node,且其文本中包含substring的节点
//A[contains(text(),"下一页")] 所有包含“下一页”字符串的超链接节点
//A[contains(@title,"文章标题")] 所有其title属性中包含“文章标题”字符串的超链接节点
-
//NODE[@id="myid"]/text() 节点名为node,且属性id为myid的节点的所有直接text子节点
-
BOOK[author/degree] 所有包含author节点同时该author节点至少含有一个的degree孩子节点的book节点
-
AUTHOR[.="Matthew Bob"] 所有值为“Matthew Bob”的author节点
-
//*[count(BBB)=2] 所有包含两个BBB孩子节点的节点
-
//[count()=2] 所有包含两个孩子节点的节点
-
//*[name()='BBB'] 所有名字为BBB的节点,等同于//BBB
-
//*[starts-with(name(),'B')] 所有名字开头为字母B的节点
-
//*[contains(name(),'C')] 所有名字中包含字母C的节点
-
//*[string-length(name()) = 3] 名字长度为3个字母的节点
-
//CCC | //BBB 所有CCC节点或BBB节点
-
/child::AAA 等价于/AAA
-
//CCC/descendant::* 所有以CCC为其祖先的节点
-
//DDD/parent::* DDD节点的所有父节点
-
//BBB[position() mod 2 = 0] 偶数位置的BBB节点
-
AUTHOR[not(last-name = "Bob")] All <author> elements that do no contain <last-name> child elements with the value Bob.
-
P/text()[2] 当前上下文节点中的P节点的第二个文本节点
-
ancestor::BOOK[1] 离当前上下文节点最近的book祖先节点
Firefox中的XPath插件:
XPath Checker