0

私はXpathを初めて使用し、以下の形式でWebサイトをスクレイプしようとしています。

<div class="top">
    <a> tittle_name </a>
    <div class="middle"> listed_date </div>
    <div class="middle"> listed_value </div>
</div>
<div class="top">
    <a> tittle_name </a>
    <div class="middle"> listed_date </div>
</div>
<div class="top">
    <a> tittle_name </a>
    <div class="middle"> listed_value </div>
</div>

Listed_valueとlisted_dateの存在はオプションです。

各tittle_nameをそれぞれlisted_date、listed_value(使用可能な場合)でグループ化してから、リーチレコードをMySQLに挿入する必要があります。

私はスクレイプシェルを使用しています。

listings = hxs.select('//div[@class=\'top\']')
for listing in listings:
    tittle_name = listing.select('/a//text()').extract()
    date_values = listing.select('//div[@class=\'middle\']')

上記のコードは、tittle_nameのリストと利用可能なlisted_date、listed_valueのリストを示していますが、それらを一致させる方法は?(形式が対称ではないため、インデックスで移動することはできません)。

ありがとう。

4

2 に答える 2

1

これらの XPath 式は絶対であることに注意してください。

/a//text()

//div[@class=\'middle\']

次のような相対 XPath 式が必要になります。

a

div[@class=\'middle\']

2番。(X)HTML のような混合コンテンツ モデルでテキスト ノードを選択することはお勧めできません。適切な DOM メソッドまたはstring()関数を使用して文字列値を抽出する必要があります。(最後のケースでは、暗黙的なノード セットがシングルトン ノード セットにキャストされるため、ノードごとに式を評価する必要があります)

于 2011-03-17T16:11:01.353 に答える
0

Web サイトでは、a に含まれるものdiv[@class='middle']が日付か値かを指定していないため、これを決定する独自の方法をコーディングする必要があります。

日付には、おそらく正規表現を使用して、何らかの分析と一致させることができる特定の形式があると思います。

listed_dateとの可能な値をより具体的に説明できますlisted_valueか?

于 2011-03-17T15:43:46.963 に答える