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

6
我正在尝试爬取以下网站: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个回答

3

我假设您正在使用Google Chrome控制台,因为有了$x()函数。您的xpath选择器选择了@href属性,实际上是有效的,在我的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"

1
谢谢!我也遇到了同样的问题。我的困扰是从<a href="/topic/19778287" name="topic">实体</a>中提取href。然而使用//a[@name = "topic"]/@href,控制台显示空列表。然后我使用了你的方法,发现它实际上返回了正确的列表。可能是Chrome的一个bug -_- - Skywalker326

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接