Python xpath-索引器错误:列表索引超出范围

Python xpath-索引器错误:列表索引超出范围,python,xml,xpath,web-scraping,expression,Python,Xml,Xpath,Web Scraping,Expression,如何使用Xpath检索以下代码中包含的端口号(4145) <tr> <td data-label="IP:port "> <span class="labelText">IP:port </span> <span> <input type="checkbox" name="proxyIp[]" value="202.57.33.134

如何使用Xpath检索以下代码中包含的端口号(4145)

<tr>
<td data-label="IP:port ">
 <span class="labelText">IP:port </span>
 <span>
  <input type="checkbox" name="proxyIp[]" value="202.57.33.134|r4883">
 </span>
 202.57.33.134:
 <span class="r4883">4145</span>
</td>
[more <td></td> ... ]
</tr>

IP:端口
202.57.33.134:
4145
[更多…]
我最后一次尝试出错:

打印(i.xpath('.//td[1]/span[3]/text()')[0]) 索引器:列表索引超出范围


我必须稍微更改一下示例XML,将其存储在以下示例中的
test.XML

<tr>
<td data-label="IP:port ">
 <span class="labelText">IP:port </span>
 <span>
  <input type="checkbox" name="proxyIp[]" value="202.57.33.134|r4883"></input>
 </span>
 <span class="r4883">4145</span>
</td>
</tr>

如您所见,
text
是在XPath
/td[1]/span[3]
中找到的元素的一个属性,我不得不稍微更改一下示例XML,存储在以下示例中的
test.XML

<tr>
<td data-label="IP:port ">
 <span class="labelText">IP:port </span>
 <span>
  <input type="checkbox" name="proxyIp[]" value="202.57.33.134|r4883"></input>
 </span>
 <span class="r4883">4145</span>
</td>
</tr>

如您所见,
text
是在XPath
/td[1]/span[3]
中找到的元素的属性,您的问题中的xml无效;
节点未正确关闭。如果您关闭该选项(就像@hintze在他的回答中所做的那样),除了他的建议之外,您还可以使用以下xpath表达式:

//tr/td//span[@class="r4883"]

您问题中的xml无效;
节点未正确关闭。如果您关闭该选项(就像@hintze在他的回答中所做的那样),除了他的建议之外,您还可以使用以下xpath表达式:

//tr/td//span[@class="r4883"]

我真的以为这就是解决办法。不幸的是,这对我来说不起作用。。。问题仍然是一样的。。。为什么要更改HTML?删除的行是否阻止了脚本工作?我不理解它是HTML,而是XML(我们讨论的是XPath,问题的标签是XML)。删除的行未包含在XML标记中。因此,XML是无效的。你能说说为什么它对你不起作用吗?我用Python3.6.3对此进行了测试。我真的认为这就是解决方案。不幸的是,这对我来说不起作用。。。问题仍然是一样的。。。为什么要更改HTML?删除的行是否阻止了脚本工作?我不理解它是HTML,而是XML(我们讨论的是XPath,问题的标签是XML)。删除的行未包含在XML标记中。因此,XML是无效的。你能说说为什么它对你不起作用吗?我用Python 3.6.3测试了这个。谢谢你的帮助,是的,这个节点很奇怪。。。这不是我写的,这是网站上的一个副本:(我试图废除代理adrss)。遗憾的是,您的解决方案也不起作用,因为类名不是静态的。。。。这是我第一次尝试。@Xodarap有趣;我查看了那个页面,事实上span类是动态的;这实际上不是一个真正的问题,可以修改xpath表达式来解决这个问题——真正的问题是,在这些页面的页面源代码中,这些跨距都是空值,因此我找不到与
4145
目标等效的跨距。它们看起来都是这样的:
。是的,那很烦人。。。一个解决方案是要求XPath查找所有类名由5个字符组成的类。我的意思是,找到离题主题的可能性很小,但我不知道如何要求Xpath这样做。@Xodarap在检查了更多内容后,底线是这些页面使用了无效的xml。我建议您将页面加载到一个类似lxml的html解析器中,该解析器可以容忍无效代码,并从那里尝试xpath。它可能适用于所有的条目,也可能不适用于所有条目。好的,我会试试,或者找到另一个网站。谢谢你的帮助谢谢你的帮助,是的,这个节点很奇怪。。。这不是我写的,这是网站上的一个副本:(我试图废除代理adrss)。遗憾的是,您的解决方案也不起作用,因为类名不是静态的。。。。这是我第一次尝试。@Xodarap有趣;我查看了那个页面,事实上span类是动态的;这实际上不是一个真正的问题,可以修改xpath表达式来解决这个问题——真正的问题是,在这些页面的页面源代码中,这些跨距都是空值,因此我找不到与
4145
目标等效的跨距。它们看起来都是这样的:
。是的,那很烦人。。。一个解决方案是要求XPath查找所有类名由5个字符组成的类。我的意思是,找到离题主题的可能性很小,但我不知道如何要求Xpath这样做。@Xodarap在检查了更多内容后,底线是这些页面使用了无效的xml。我建议您将页面加载到一个类似lxml的html解析器中,该解析器可以容忍无效代码,并从那里尝试xpath。它可能适用于所有的条目,也可能不适用于所有条目。好的,我会试试,或者找到另一个网站。谢谢你的帮助