Xpath 为什么需要//而不是/
考虑以下HTML代码:Xpath 为什么需要//而不是/,xpath,scrapy,Xpath,Scrapy,考虑以下HTML代码: <html> <head> <title>Example website</title> </head> <body> <div> <table id='tableid'> <tr> <td> <a href="/blabla" title="Blabla1">Blabla1&l
<html>
<head>
<title>Example website</title>
</head>
<body>
<div>
<table id='tableid'>
<tr>
<td>
<a href="/blabla" title="Blabla1">Blabla1</a>
<a href="/blabla" title="Blabla1">Blabla2</a>
<a href="/blabla" title="Blabla1">Blabla3</a>
<a href="/blabla" title="Blabla1">Blabla4</a>
</td>
<td>col2</td>
<td>col3</td>
<td>col4</td>
</tr>
</table>
</body>
</html>
如果使用单张/桌子后面?此时我已经在表节点上了(它应该成为我的“根”),所以/应该足够了
提前谢谢 table[@id=“tableid”]之后的单个
/
如果您只想要table
的直系子对象,则可以使用。要获取表[@id=“tableid”]
的任何后代a
,您需要//a
/
是/genderant或self::node()/
子体或自轴包含上下文节点和上下文节点的子体。由于将上下文节点建立为table[@id=“tableid”]
,因此除了作为table[@id=“tableid”]
的后代的元素之外,不会得到任何a
元素
将查找所有
元素,其id
等于tableid
//a/@href
在此之后添加将在
元素中的任何位置(子、孙……)查找所有
元素
如果您确定所需的所有
元素都位于第一个
(表-->tr-->td)的下方,则可以跳过第二个/
,然后执行以下操作:
//table[@id="tableid"]/tr[1]/td[1]/a/@href
/tr[1]/td[1]
将直接进入
元素
//a/@href
//table[@id="tableid"]/tr[1]/td[1]/a/@href