【问题标题】:Is there anyway to check if given XPath is valid in Python?无论如何检查给定的 XPath 在 Python 中是否有效?
【发布时间】:2015-02-28 20:14:43
【问题描述】:

我有一个从表中提取一些信息的 python 代码。但问题是有时 Xpath 会发生变化。现在它只在两个不同的 XPath 之间变化,如下所示:

//*[@id='content-primary']/table[3]/tbody/tr[td[1]/span/span/

另一种选择是在表格中稍作更改,如下所示:

//*[@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&nbsp;</dd>
                        <dt><img src="http://svenskfotboll.se/i/u/alert.gif" alt="Röda utropstecknet" /></dt>
                        <dd> = Peka på utropstecknet så visas en notering&nbsp;</dd>
                        <dt><img src="http://svenskfotboll.se/i/widget.gif" alt="Widget" /></dt>
                        <dd><a href="http://gbgfotboll.se/widgets/?scr=cominginleague&amp;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&amp;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&amp;faid=16484">Sparbanksvallen Götene konstgräs </a> </td>
        </tr>

【问题讨论】:

  • 这个 [解决方案][1] 可能会对您有所帮助。在异常情况下,您可以尝试另一个文件。 [1]:stackoverflow.com/questions/22889021/valid-xpath-expression
  • 文件是什么意思? @维杰
  • 我建议构建更多依赖于节点属性值(id、类、.etc)的单个 XPath,而不是有 2 个依赖于节点位置的 XPath...
  • 无论如何你可以提供一个关于这种情况的例子吗?我对python或html不太熟悉@har07
  • @TimoCengiz 如果您可以发布部分 html,至少从 id 等于 'content-primary' 的节点到您希望 XPath 返回的 &lt;span&gt;,我们可能会能够提供一个更好的 XPath 示例,该示例适用于发布的 html

标签: python html xml dom xpath


【解决方案1】:

在我的情况下,我不需要指定从哪个表中提取信息。由于我将获得的信息是使用仅包含在该表中的日期指定的,因此我只使用了此代码,并且对我来说效果很好:

**rows_xpath = XPath("//*[@id='content-primary']/table/tbody/tr[td[1]/span/span//text()='%s']" % (date))**

现在它只是表格,这意味着它将遍历网站中的两个表格。它可能不是一个干净的解决方案,但对我有用..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 2012-04-16
    • 2012-04-27
    相关资源
    最近更新 更多