Mam następujący problem: „Skrobię ceny ze strony internetowej i działa, ale pobiera tylko liczby przed przecinkiem.
Przykład: gdy coś jest warte „79 €,90„zeskrobuje tylko 79, a nie 90.
<span class="price right right10">
€ 79,
<sup>
90*
</sup>
</span>
Chcę to zapisać w jednym polu tego typu:
class Prices(scrapy.Item):
price = scrapy.Field()
To jest mój obecny selektor xpath:
item["price"] = "".join(sel.xpath("div[@class="waresSum"]/p/span/text()").extract())
Odpowiedzi:
3 dla odpowiedzi № 1Kluczowym problemem jest to, że pytasz o bezpośrednie węzły potomne tekstu span
, musisz pobrać wszystkie węzły tekstowe z wnętrza span
element:
//div[@class="waresSum"]/p/span//text()
HERE^
Również użyłbym .re()
odfiltrować niechciane postacie i uzyskać tylko cyfry, ,
i -
:
$ scrapy shell index.html
In [9]: "".join(response.xpath("//span//text()").re(r"[0-9,-]+"))
Out[9]: u"79,90"