2017-02-26 10 views
1

こんにちは、私は電子商取引のページをスクラップしようとしていますが、価格を得ることができません。どのように治療費で全額を引き出すのですか?

私はこの線でページを持っている:

<span class="price">255,<sup>99</sup>€</span> 
<span class="price">255 €</span> 

しかし、私は1行に全ての価格を抽出することはできません。

私が試した:

)(抽出

response.xpath( '//スパン[クラス@ = "価格"] /テキストを()')しかし、それはテキストを無視します。 <sup>タグ... 私は間違っていますか?助けてください。

答えて

1

テキストの前に別のスラッシュを追加する必要があります。したがって、すべてのノードに対処します。

response.xpath('//span[@class="price"]//text()').extract() 

Text='255,' 
Text='99' 
Text='€' 
+0

が、どのように一つのフィールドにそれらを結合するには? – user3237444

0

単一のスプラッシュではなく、ダブルスプラッシュを挿入する必要があります。

response.xpath('//span[@class="price"]//text()').extract() 

このステートメントは、指定されたタグの下のすべてのテキストをリストオブジェクトとして返します。 返されるリストには、空または返送キャリッジ文字のような無駄な要素がいくつかあることに注意してください。 価格情報のみを抽出する場合は正規表現を使用できます。

response.xpath('//span[@class="price"]//text()').re(r'[\d.,]+') 

通貨記号は無視されました。最後に

['255,','99','255'] 

あなたが最初にすべての製品を取得

''.join(response.xpath('//span[@class="price"][1]//text()').re(r'[\d.,]+')).replace(",",".") 

ページから255.99を取得したい場合。

決勝コード:

products = response.xpath('//*[@class="catalog-table"]//td') 
 
for prod in products: 
 
    price = ''.join(prod.xpath('//span[@class="price"][1]//text()').re(r'[\d.,]+')).replace(",",".") 
 
    print price

+0

ありがとう、私はこれをシェルのhttps://www.varle.lt/m/mobilieji-telefonai?p=4ページで試しましたが、今では1つのフィールドにすべてが入っています。 – user3237444

+0

あなたはscrapyを使いますか?もしそうなら、これをしてください。まず、すべての製品を1つずつ繰り返す必要があります。これで製品のリストを得ることができます( '// * [@ class = "catalog-table"] // td')。そしてすべての製品を繰り返し、各製品から価格を取得します。 Answer Postを編集します。 – bbanzzakji

関連する問題