2017-02-03 3 views
0

Ich bin neu im Scraping mit Scrapy und leider kann ich nicht auf Daten durch eine Anfrage zugreifen (um eine AJAX Anfrage zu simulieren). Ich lese andere Themen, aber es half mir nicht meine Probleme zu lösen. Die Website, die ich crawlen möchte, ist auchan.fr, es hat eine dynamische Suchfeld von Algolia (algolia) angetrieben.Simulieren Ajax Call mit Scrapy

Hier ist meine Spinne für eine Nutella Anfrage (POST dann):

class AjaxspiderSpider(scrapy.Spider): 
name = "ajaxspider" 
allowed_domains = ["auchandirect.fr/recherche"] 
#start_urls = ['https://www.auchandirect.fr/recherche/'] 

def start_requests(self): 
    full_url = "/1/indexes/articles_article_11228/query?x-algolia-agent=Algolia%20for%20vanilla%20JavaScript%203.20.4&x-algolia-application-id=TN96V7LRXC&x-algolia-api-key=46a121512cba9c452df318ffca231225" 
    yield FormRequest('https://tn96v7lrxc-dsn.algolia.net' + full_url, callback=self.parse, formdata={"params":"query=nutella&facets=%5B%22loopr_shelf%22%5D&hitsPerPage=50"}) 

def parse(self, response): 
    with open('data_content', 'w') as file: 
     file.write(response.content) 

und hier ist das Protokoll ich erhielt:

2017-02-03 15:14:34 [scrapy.utils.log] INFO: Scrapy 1.3.0 started (bot: ajax) 
2017-02-03 15:14:34 [scrapy.utils.log] INFO: Overridden settings: {'SPIDER_MODULES': ['ajax.spiders'], 'NEWSPIDER_MODULE': 'ajax.spiders', 'BOT_NAME': 'ajax'} 
2017-02-03 15:14:34 [scrapy.middleware] INFO: Enabled extensions: 
['scrapy.extensions.telnet.TelnetConsole', 
'scrapy.extensions.logstats.LogStats', 
'scrapy.extensions.corestats.CoreStats'] 
2017-02-03 15:14:34 [scrapy.middleware] INFO: Enabled downloader middlewares: 
['scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware', 
'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware', 
'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware', 
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware', 
'scrapy.downloadermiddlewares.retry.RetryMiddleware', 
'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware', 
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware', 
'scrapy.downloadermiddlewares.redirect.RedirectMiddleware', 
'scrapy.downloadermiddlewares.cookies.CookiesMiddleware', 
'scrapy.downloadermiddlewares.stats.DownloaderStats'] 
2017-02-03 15:14:34 [scrapy.middleware] INFO: Enabled spider middlewares: 
['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware', 
'scrapy.spidermiddlewares.offsite.OffsiteMiddleware', 
'scrapy.spidermiddlewares.referer.RefererMiddleware', 
'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware', 
'scrapy.spidermiddlewares.depth.DepthMiddleware'] 
2017-02-03 15:14:34 [scrapy.middleware] INFO: Enabled item pipelines: 
[] 
2017-02-03 15:14:34 [scrapy.core.engine] INFO: Spider opened 
2017-02-03 15:14:34 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 
2017-02-03 15:14:34 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023 
2017-02-03 15:14:35 [scrapy.core.engine] DEBUG: Crawled (400) <POST https://tn96v7lrxc-dsn.algolia.net/1/indexes/articles_article_11228/query?x-algolia-agent=Algolia%20for%20vanilla%20JavaScript%203.20.4&x-algolia-application-id=TN96V7LRXC&x-algolia-api-key=46a121512cba9c452df318ffca231225> (referer: None) 
2017-02-03 15:14:35 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <400 https://tn96v7lrxc-dsn.algolia.net/1/indexes/articles_article_11228/query?x-algolia-agent=Algolia%20for%20vanilla%20JavaScript%203.20.4&x-algolia-application-id=TN96V7LRXC&x-algolia-api-key=46a121512cba9c452df318ffca231225>: HTTP status code is not handled or not allowed 
2017-02-03 15:14:35 [scrapy.core.engine] INFO: Closing spider (finished) 
2017-02-03 15:14:35 [scrapy.statscollectors] INFO: Dumping Scrapy stats: 
{'downloader/request_bytes': 545, 
'downloader/request_count': 1, 
'downloader/request_method_count/POST': 1, 
'downloader/response_bytes': 338, 
'downloader/response_count': 1, 
'downloader/response_status_count/400': 1, 
'finish_reason': 'finished', 
'finish_time': datetime.datetime(2017, 2, 3, 14, 14, 35, 216807), 
'log_count/DEBUG': 2, 
'log_count/INFO': 8, 
'response_received_count': 1, 
'scheduler/dequeued': 1, 
'scheduler/dequeued/memory': 1, 
'scheduler/enqueued': 1, 
'scheduler/enqueued/memory': 1, 
'start_time': datetime.datetime(2017, 2, 3, 14, 14, 34, 977436)} 
2017-02-03 15:14:35 [scrapy.core.engine] INFO: Spider closed (finished) 

Ich danke Ihnen für jedes Stück für Informationen

+0

Was genau ist das Problem? –

+0

meine Spinne ist geschlossen, bevor es auf die Parse-Funktion ging, aufgrund der Anfrage, die ich vermute, so kann ich nicht die Rückkehr meiner Anfrage analysieren – Pablo

Antwort

1

Dies ist keine Ajax-bezogene, aber standortspezifische Frage, Sie übergeben die Suchparameter-Zeichenfolge falsch, indem Sie versuchen, sie als formdata zu übergeben, während sie als roher Körper vonübergeben werden sollAnfrage, so sollte es so sein:

yield Request('https://tn96v7lrxc-dsn.algolia.net' + full_url, 
       callback=self.parse, method='POST', 
       body='{"params":"query=nutella&facets=%5B%22loopr_shelf%22%5D&hitsPerPage=50"}')