0

tr外部テーブルのテーブルをターゲットにしようとしています。tr外側のテーブルの 1 番目にはtable、テーブルのデータを識別するイメージを含む が含まれています。データ型ごとに 1 つずつ、異なるイメージを持つ複数の外部テーブルがあります。Nokogiri を使用して画像をターゲットにできます

page.css('table tr table tr img[@src="images/bicycyles.gif"]')

tr外側のテーブルの 3 番目のテーブルにあるデータを取得したいと考えています。ページ上のすべてのデータをターゲットにすることができます

page.css('table[bgcolor="#FFFFFF"] tr[valign="top"]')

しかし、それは他のデータ型からもデータを取り込みます (例: "cars.gif" の下)。

これらの検索を組み合わせて、自転車のデータのみを見つけるにはどうすればよいですか? 私は基本的に「を含むwithの兄弟であるwithのtrwithからテキストを抽出する」と言いたいですvalign=toptablebgcolor=#fffffftrimg src=bicycles.gif

HTML の例を次に示します。

<!-- Outer Table -->
<table>
    <tr>
        <td><img src="images/spacer.gif" width="1" height="10" /></td>
    </tr>
    <tr>
        <td>
            <table> 
                <tr>
                    <!-- Info must have this particular image preceding it -->
                    <td><img src="images/bicycle.gif" /></td>
                </tr>
            </table>
        </td>
    </tr>
    <tr>
        <td><img src="images/spacer.gif" width="100" height="10" /></td>
    </tr>
    <tr>
        <td>
            <table width="532"> 
                <tr>
                    <td>Info</td>
                </tr>
            </table>
            <table bgcolor="#FFFFFF">
                <tr valign="top">
                    <!-- The info I want to extract -->
                    <td>Bicycle Name</td>
                </tr>
            </table>
        </td>
    </tr>
    <!-- More trs with different data types --> 
</table>
4

2 に答える 2

1

"を含む の兄弟であるtrwithvalign=top内のtablewith からテキストを抽出します"bgcolor=#fffffftrimg src=bicycles.gif

サンプル HTML に基づく若干の修正:

tr" withvalign=top内のtablewith からテキストを抽出します。これは、それ自体が を含む前の兄弟を持つbgcolor=#ffffff内に含まれています。 "trtrimg src=bicycles.gif

XPath に変換:

page.xpath('//tr[preceding-sibling::tr//img/@src = "images/bicycle.gif"]//table[@bgcolor="#FFFFFF"]//tr[@valign="top"]').text.strip

#=> "Bicycle Name"

あなたが示した例では、どちらかが必要であることに注意して[bgcolor="#FFFFFF"]ください[valign="top"]。ハードコーディングされたスタイルに依存することは理想的ではないため、指定する必要があるものは少ないほど良いです。

于 2012-11-29T16:32:42.603 に答える
0

まだ面倒ですが、cssを使用すると読みやすくなります。

page.at('img[src="images/bicycle.gif"]').ancestors('tr')[1].at('~ tr tr[valign=top] td').text
#=> "Bicycle Name"
于 2012-11-30T00:31:38.150 に答える