3

前の要素 text() が特定の基準に一致する場合に要素を抽出したい。例えば、

<html>
<div>
<table class="layouttab">
    <tbody>
    <tr>
        <td scope="row" class="srb">General information:&nbsp;&nbsp;</td>
        <td>(xxx) yyy-zzzz</td>
    </tr>
    <tr>
        <td scope="row" class="srb">Website:&nbsp;&nbsp;</td>
        <td><a href="http://xyz.edu" target="_blank">http://www.xyz.edu</a>
        </td>
    </tr>
    <tr>
        <td scope="row" class="srb">Type:&nbsp;&nbsp;</td>
        <td>4-year, Private for-profit</td>
    </tr>
    <tr>
        <td scope="row" class="srb">Awards offered:&nbsp;&nbsp;</td>
        <td>Less than one year certificate<br>One but less than two years certificate<br>Associate's degree<br>Bachelor's
            degree
        </td>
    </tr>
    <tr>
        <td scope="row" class="srb">Campus setting:&nbsp;&nbsp;</td>
        <td>City: Small</td>
    </tr>
    <tr>
        <td scope="row" class="srb">Related Institutions:</td>
        <td><a href="?q=xyz">xyz-New York</a>
            (Parent):
            <ul>
                <li style="list-style:circle">Berkeley College - Westchester Campus</li>
            </ul>
        </td>
    </tr>
    </tbody>
</table>
</div>
</html>

ここで、前の要素の text() プロパティに "Website: " が含まれている場合に URL を抽出したいと考えています。私はスクレイピー0.14でpython 2.xを使用しています。などの個々の要素を使用してデータを抽出できました

 item['Header_Type']= site.select('div/table[@class="layouttab"]/tr[3]/td[2]/text()').extract()

しかし、web サイトのパラメーターがなく、tr[3] が上にシフトし、web サイト要素に「タイプ」があり、タイプに「提供される賞」がある場合、このアプローチは失敗します。

xPathに次のような特定のコマンドがありますか?

'div/table[@class="layouttab"]/tr/td[2] {if td[1] has text = "Website"}

前もって感謝します。

4

5 に答える 5

5

pythonとscrapyの場合、次を使用して「タイプ」フィールドを選択する必要があります。私にとってはうまくいきました。

item['Header_Type']= site.select('div[1]/table[@class="layouttab"]/tr/td[contains(text(),"Type")]/following-sibling::td[1]/text()').extract()
于 2012-08-06T23:01:48.553 に答える
4

div/table[@class="layouttab"]\tr\td[text()="Website"]\following-sibling::node()うまくいくと思います。それ以外の場合は、そこからユーザーparentして移動できますtd[2]

于 2012-08-01T19:57:44.983 に答える
1

これも機能します..そして、より一般的です..

//table[@class='layouttab']//td[contains(text(),'Website')]/following-sibling::td//text()

データを抽出しているページにテーブルが1つしかない場合、これも機能します..

//td[contains(text(),'Website')]/following-sibling::td//text()
于 2012-08-06T10:24:37.647 に答える
1

次の XPath が行います。

/html/div/table[@class='layouttab']/tbody/tr/td[contains(text(),'Website')]/following-sibling::td[1]
于 2012-08-01T19:57:47.430 に答える
1

これは私のために働く:

/html/div/table[@class="layouttab"]/tbody/tr/td[. = 'Website:  ']/following-sibling::td/a/text()
  • までドリルダウンしてtd、そのテキストが一致するかどうかを確認しますWebsite:
  • 次へ移動するために使用following-siblingしますtd
  • をドリルダウンして取得し、a次を使用して URL を取得します。text()
于 2012-08-01T19:59:12.610 に答える