2

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

テーブルを選択したい Web サイトの構造は次のとおりです。

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

Web サイトには複数のテーブルがあるため、クラスが "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の文字列値がclass文字列を含み、"player"(the tr) がXML ドキュメント内tbodyの any の子である aの子であり、その属性が string value であるすべての文字列が選択されます。tableclass"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 式が評価され、選択されたノード (この場合は 1 つだけ) が出力にコピーされます

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