Ich baue eine Scrapy-Spinne, die die XPath-Abfrage als Eingabeparameter verwendet.Übergabe der xPath-Übersetzungsfunktion in Scrapy funktioniert nicht für Sonderzeichen
Die spezifische Seite, die ich versuche zu kratzen, hat Zeilenvorschübe, neue Zeilen und andere Zeichen innerhalb des Preistextfeldes und ich benutze die translate()
Funktion, um sie zu entfernen.
Der Selektor funktioniert gut mit dem Translate, wenn er explizit im Code enthalten ist, aber der Translate funktioniert nicht, wenn er als Parameter übergeben wird.
Hier ist meine Spinne:
import scrapy
from spotlite.items import SpotliteItem
class GenericSpider(scrapy.Spider):
name = "generic"
xpath_string = ""
def __init__(self, start_url, allowed_domains, xpath_string, *args, **kwargs):
super(GenericSpider, self).__init__(*args, **kwargs)
self.start_urls = ['%s' % start_url]
self.allowed_domains = ['%s' % allowed_domains]
self.xpath_string = xpath_string
def parse(self, response):
self.logger.info('URL is %s', response.url)
self.logger.info('xPath is %s', self.xpath_string)
item = SpotliteItem()
item['url'] = response.url
item['price'] = response.xpath(self.xpath_string).extract()
return item
und ich verwende die im Anschluss an die Spinne zu nennen.
scrapy crawl generic -a start_url=https://www.danmurphys.com.au/product/DM_4034/penfolds-kalimna-bin-28-shiraz -a allowed_domains=danmurphys.com.au -a "xpath_string=translate((//span[@class='price'])[1]/text(),',$\r\n\t','')"
Das Problem scheint bestimmte Zeichen im Argument zu übergeben, d. H. \ R \ n \ t.
Das '$' Zeichen wurde korrekt entfernt, aber die \ r \ n \ t Zeichen entsprechen nicht der Ausgabe unten.
{'price': [u'\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t27.50\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t'],
'url': 'https://www.danmurphys.com.au/product/DM_4034/penfolds-kalimna-bin-28-shiraz.jsp;jsessionid=B0211294F13A980CA41261379CD83541.ncdlmorasp1301?bmUID=loERXI6'}
Jede Hilfe oder Beratung wird geschätzt!
Danke,
Michael