使用带有xpath和python的条件提取值

时间:2016-01-29 10:28:06

标签: python html xpath

这是从http://www.flashscore.com/hockey/sweden/shl/results/

中提取HTML文件
    <td title="Click for match detail!" class="cell_sa score  bold">4:3<br><span class="aet">(3:3)</span></td>
    <td title="Click for match detail!" class="cell_sa score  bold">2:5</td>

我现在想在规定时间之后提取分数。 这意味着只要存在'span class = "aet"'td class="cell_sa score bold"之后),我就需要从span class = "aet"获取文字。如果span class = "aet"不存在,我想从td class="cell_sa score bold"中提取文字。

在上述情况下,所需的输出(在列表中)将是:

[3:3,2:5]

我怎么能用python中的xpath语句去做?

1 个答案:

答案 0 :(得分:0)

您可以访问所需标签的文本节点,遵守您定义的条件:

(/tr/td[count(./span[@class = 'aet']) > 0]/span[@class = 'aet'] | /tr/td[0 = count(./span[@class = 'aet'])])/text()

我认为<td>标记已归入<tr>标记。

如果您想严格选择<td>有&#39; cell_sa&#39;和&#39;得分&#39;并且&#39;大胆&#39;在每个[contains(@class, 'cell_sa')][contains(@class, 'score')][contains(@class, 'bold')]之后添加td。如下:

(/tr/td[contains(@class, 'cell_sa')][contains(@class, 'score')][contains(@class, 'bold')][count(./span[@class = 'aet']) > 0]/span[@class = 'aet'] | /tr/td[contains(@class, 'cell_sa')][contains(@class, 'score')][contains(@class, 'bold')][0 = count(./span[@class = 'aet'])])/text()
  • 如您所见,我尝试独立且松散地实现@class检查方法顺序(就像它在css选择器中一样)。您可以将此检查实现为简单的字符串比较,从而产生脆弱的数据使用者