无论如何要检查给定的 XPath 在 Python 中是否有效?
Is there anyway to check if given XPath is valid in Python?
我有一个 python 代码正在从 table 中提取一些信息。但有时 Xpath 会发生变化。现在它只在两个不同的 XPath 之间变化,如下所示:
//*[@id='content-primary']/table[3]/tbody/tr[td[1]/span/span/
另一种选择是对 table 稍作改动,如下所示:
//*[@id='content-primary']/table[2]/tbody/tr[td[1]/span/span/
这是我现在用来获取我需要的信息的代码:
rows_xpath = XPath("//*[@id='content-primary']/table[3]/tbody/tr[td[1]/span/span//text()='%s']" % (date))
所以我想做的是检查给定的 XPath 是否有效。如果不是,我只是尝试其他 XPath 替代方案。
希望有人能帮我解决这个问题。谢谢大家
EDIT1
<table class="clCommonGrid" cellspacing="0">
<thead>
<tr>
<td colspan="3">Kommande matcher</td>
</tr>
<tr>
<th style="width:1%;">Tid</th>
<th style="width:69%;">Match</th>
<th style="width:30%;">Arena</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="3">
<dl>
<dt class="clNotify">Röd text</dt>
<dd> = Ändrad matchtid </dd>
<dt><img src="http://svenskfotboll.se/i/u/alert.gif" alt="Röda utropstecknet" /></dt>
<dd> = Peka på utropstecknet så visas en notering </dd>
<dt><img src="http://svenskfotboll.se/i/widget.gif" alt="Widget" /></dt>
<dd><a href="http://gbgfotboll.se/widgets/?scr=cominginleague&ftid=57109">Hämta widget för kommande matcher</a></dd>
</dl>
</td>
</tr>
</tfoot>
<tbody class="clGrid">
<tr class="clTrOdd">
<td nowrap="nowrap" class="no-line-through">
<span class="matchTid"><span>2015-04-17<!-- br ok --> 19:15</span></span> //This is the date i am checking with first
</td>
<td><a href="?scr=result&fmid=2928398">Götene IF - Vårgårda IK </a></td> // The other information that i need from the table later
<td><a href="?scr=venue&faid=16484">Sparbanksvallen Götene konstgräs </a> </td>
</tr>
在我的情况下,我不需要指定从哪个 table 中提取信息。由于我将获得的信息是用仅包含在 table 中的日期指定的,我只是使用了这段代码并且对我来说效果很好:
**rows_xpath = XPath("//*[@id='content-primary']/table/tbody/tr[td[1]/span/span//text()='%s']" % (date))**
现在只是 table,这意味着它将通过网站中的两个 table。它可能不是一个干净的解决方案,但对我有用..
我有一个 python 代码正在从 table 中提取一些信息。但有时 Xpath 会发生变化。现在它只在两个不同的 XPath 之间变化,如下所示:
//*[@id='content-primary']/table[3]/tbody/tr[td[1]/span/span/
另一种选择是对 table 稍作改动,如下所示:
//*[@id='content-primary']/table[2]/tbody/tr[td[1]/span/span/
这是我现在用来获取我需要的信息的代码:
rows_xpath = XPath("//*[@id='content-primary']/table[3]/tbody/tr[td[1]/span/span//text()='%s']" % (date))
所以我想做的是检查给定的 XPath 是否有效。如果不是,我只是尝试其他 XPath 替代方案。
希望有人能帮我解决这个问题。谢谢大家
EDIT1
<table class="clCommonGrid" cellspacing="0">
<thead>
<tr>
<td colspan="3">Kommande matcher</td>
</tr>
<tr>
<th style="width:1%;">Tid</th>
<th style="width:69%;">Match</th>
<th style="width:30%;">Arena</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="3">
<dl>
<dt class="clNotify">Röd text</dt>
<dd> = Ändrad matchtid </dd>
<dt><img src="http://svenskfotboll.se/i/u/alert.gif" alt="Röda utropstecknet" /></dt>
<dd> = Peka på utropstecknet så visas en notering </dd>
<dt><img src="http://svenskfotboll.se/i/widget.gif" alt="Widget" /></dt>
<dd><a href="http://gbgfotboll.se/widgets/?scr=cominginleague&ftid=57109">Hämta widget för kommande matcher</a></dd>
</dl>
</td>
</tr>
</tfoot>
<tbody class="clGrid">
<tr class="clTrOdd">
<td nowrap="nowrap" class="no-line-through">
<span class="matchTid"><span>2015-04-17<!-- br ok --> 19:15</span></span> //This is the date i am checking with first
</td>
<td><a href="?scr=result&fmid=2928398">Götene IF - Vårgårda IK </a></td> // The other information that i need from the table later
<td><a href="?scr=venue&faid=16484">Sparbanksvallen Götene konstgräs </a> </td>
</tr>
在我的情况下,我不需要指定从哪个 table 中提取信息。由于我将获得的信息是用仅包含在 table 中的日期指定的,我只是使用了这段代码并且对我来说效果很好:
**rows_xpath = XPath("//*[@id='content-primary']/table/tbody/tr[td[1]/span/span//text()='%s']" % (date))**
现在只是 table,这意味着它将通过网站中的两个 table。它可能不是一个干净的解决方案,但对我有用..