当前位置:嗨网首页>书籍在线阅读

10-常见任务示例

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

2.2.3 常见任务示例

  • 获取 id"firstHeading"h1 标签下 span 中的 text

  • 获取 id 为" toc "的 div 标签内的无序列表( ul )中所有链接 URL

  • 获取 class 属性包含 "ltr" 以及 class 属性包含 "skin-vector" 的任意元素内所有标题元素( h1 )中的文本。这两个字符串可能在同一个 class 中,也可能在不同的 class 中。

  • 选择 class 属性值为" infobox "的表格中第一张图片的URL。

  • 选择 class 属性以" reflist "开头的 div 标签中所有链接的URL。

  • 选择子元素包含文本" References "的元素之后的 div 元素中所有链接的URL。

  • 获取页面中每张图片的URL。

//img/@src

有一些XPath表达式,你将会经常遇到。让我们看一些目前在维基百科页面上的例子。维基百科拥有一套非常稳定的格式,所以我认为它们不会很快发生改变,不过改变终究还是会发生的。我们把如下这些表达式作为说明性示例。

//table[@class="infobox"]//img[1]/@src
//­*[text()="References"]/../following-sibling::div//a

实际上,你将会经常在XPath表达式中使用到类。在这些情况下,需要记住由于一些被称为CSS的样式元素,你会经常看到HTML元素在其 class 属性中拥有多个类。比如,在一个导航系统中,你会看到一些div标签的 class 属性是" link ",而另一些是" link active "。后者是当前激活的链接,因此会表现为可见或使用一种特殊的颜色(通过CSS)高亮表示。当抓取时,你通常会对包含有特定类的元素感兴趣,具体来说,就是前面例子中的" link "和" link active "。对于这种情况,XPath的 contains() 函数可以让你选择包含有指定类的所有元素。

//div[starts-with(@class,"reflist")]//a/@href

请注意该表达式非常脆弱并且很容易无法使用,因为它对文档结构做了过多假设。

//h1[@id="firstHeading"]/span/text()
//div[@id="toc"]/ul//a/@href
//­*[contains(@class,"ltr") and contains(@class,"skin-vector")]//h1//text()