0

私は python/BS4 でいくつかの製品ページを読んでいて、コードの 1 行で興味深い多様性、つまりアイテムの価格を見つけました。

場合によっては、HTML は次のようになります。

<span class="currency">$<span id="product_price">0.00</span></span>

また、次の場合もあります。

<span class="currency">$17.95</span></b>

使用するprice = soup.find('span', {'class' : 'currency'})

スパンを分離することはできますが、テキストだけを取得しようとすると、

priceStr = price.findAll(text=re.compile(r''))

そして、それを出力ファイルに書き込みます

divpage.write('Price = ' + str(priceStr) + '\n')

私は得ます(最初の例の場合):

Price = [u'$', u'0.00']

私の質問は、「$」なしで価格だけを読み取る方法はありますか?また、エンコーディングを「u'0.00」から「0.00」に変換するにはどうすればよいですか?

Python の find & replace 関数を使用してこれを実行できることはわかっていますが、いずれかのフォームに対して w check を記述することなく、可能な限り BSS4 に固執したいと思います...

4

2 に答える 2

4

find_all() の代わりに get_text() を使用します

price_str = price.get_text() # $17.95

次に、lstrip を使用してドル記号を取り除くことができます

price_str = price_str.lstrip('$') # 17.95

そして、あなたは完了です!

于 2012-04-21T04:02:05.680 に答える
0

ここで正規表現を使用すると、必要な文字を保持し、他のすべてを削除することもできます。

if price_str is not None :
    price =  re.sub("[^0123456789.]","",price_str.get_text())
于 2015-04-18T06:50:26.187 に答える