使用XPath选择以下兄弟的href属性

时间:2015-06-07 00:27:32

标签: html google-chrome xpath web-scraping

我正在尝试抓取以下网站:http://www.hudson211.org/zf/profile/service/id/659837

我正在尝试选择“网址”文字旁边的href。以下xpath选择器获取我之后的标记:

$x("//th[contains(text(), 'Web Address')]/following-sibling::td/a")

返回

<a href="http://www.co.sullivan.ny.us">www.co.sullivan.ny.us</a>

但是,当我专门尝试使用@href提取href时,返回值为空数组:

$x("//th[contains(text(), 'Web Address')]/following-sibling::td/a/@href")

返回[]

这是我正在查看的行的HTML:

<tr valign="top">
    <td class="profile_view_left"></td>
    <th align="left" class="profile_view_center">Web Address</th>
    <td class="profile_view_right">
      <ahref="http://www.co.sullivan.ny.us">www.co.sullivan.ny.us</a>                         </td>
    <td></td>
</tr>

1 个答案:

答案 0 :(得分:3)

我认为您使用的是Google Chrome控制台,因为$x()功能。选择@href属性实际工作的xpath,正如我在Chrome中测试的那样,只有结果不会显示在控制台中,就像您选择了一个元素一样 - 原因我是目前还不太确定 - :

>var result = $x("//th[contains(text(), 'Web Address')]/following-sibling::td/a/@href")
undefined
>result[0].value
"http://www.co.sullivan.ny.us"

看到使用完全相同的表达式,变量result包含预期的url值。如果您只想在控制台中显示单个href值而无需进一步处理,则可以执行以下操作:

>$x("//th[contains(text(), 'Web Address')]/following-sibling::td/a/@href")[0].value
"http://www.co.sullivan.ny.us"