2

team = hxs.select ('//table[@class="tablehead"/tbody/tr[contains[.@class, "player"]')

我要选择的表的网站结构如下:

<html>
 <body>
  <table>
   <tbody>
    <tr>
     <td>...</td>
     <td>...</td>
       ...
    </tr>
   </tbody>
  </table>
 </body>
</html>

由于网站中有多个表格,我只想选择一个其类定义为“tablehead”的表格。另外,对于该表,我只想选择其类属性包含字符串“player”的标签。我上面的尝试一开始看起来有点参差不齐。我尝试运行爬虫,它说我上面生成的行是无效的 xpath 行。任何建议都会很好。

4

2 回答 2

4

我以前遇到过这些问题,请尝试tbody在 xpath 表达式中省略。

于 2012-06-17T05:55:11.607 回答
2

//table[@class="tablehead"/tbody/tr[contains[.@class, "player"]

纠正这个结果

//table[@class='tablehead']/tbody/tr[contains(@class, 'player')]

这将选择其属性包含字符串的每个tr字符串值,并且 (the ) 是XML 文档中 any 的子级 a 的子级,其属性具有字符串 value 。class"player"trtbodytableclass"tablehead"

基于 XSLT 的验证

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/">
   <xsl:copy-of select=
    "//table[@class='tablehead']
        /tbody/tr[contains(@class, 'player')]
    "/>
 </xsl:template>
</xsl:stylesheet>

当对提供的 XML 文档应用此转换时(更真实一点):

<html>
    <body>
        <table class="tablehead">
            <tbody>
                <tr class="major-player">
                    <td>player1</td>
                    <td>player2</td>
                </tr>
            </tbody>
        </table>
    </body>
</html>

评估 Xpath 表达式,并将选定的节点(在本例中只有一个)复制到输出

<tr class="major-player">
   <td>player1</td>
   <td>player2</td>
</tr>
于 2012-06-16T23:41:38.617 回答