2017-12-19 11 views
0

Aus irgendeinem Grund habe ich 403 für jede Anfrage bei der Verwendung von Splash. Was ich falsch mache?Scrapy + Splash Return 403 für jede Seite

Nach https://github.com/scrapy-plugins/scrapy-splash ich einrichten alle Einstellungen:

SPLASH_URL = 'http://localhost:8050' 
DOWNLOADER_MIDDLEWARES = { 
    'scrapy_splash.SplashCookiesMiddleware': 723, 
    'scrapy_splash.SplashMiddleware': 725, 
    'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810, 
} 
SPIDER_MIDDLEWARES = { 
    'scrapy_splash.SplashDeduplicateArgsMiddleware': 100, 
} 
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter' 
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage' 

Gestartet Splash mit Docker

sudo Docker run -P 8050: 8050 scrapinghub/splash

Spinne Code:

import scrapy 

from scrapy import Selector 
from scrapy_splash import SplashRequest 


class VestiaireSpider(scrapy.Spider): 
    name = "vestiaire" 
    base_url = "https://www.vestiairecollective.com" 
    rotate_user_agent = True 

    def start_requests(self): 
     urls = ["https://www.vestiairecollective.com/men-clothing/jeans/"] 
     for url in urls: 
      yield SplashRequest(url=url, callback=self.parse, meta={'args': {"wait": 0.5}}) 

    def parse(self, response): 
     data = Selector(response) 
     category_name = data.xpath('//h1[@class="campaign campaign-title clearfix"]/text()').extract_first().strip() 
     self.log(category_name) 
Dann

Ich betreibe die Spinne:

scrapy Crawl Test

Und eine 403 zum Anfordern url zurück:

2017-12-19 22:55:17 [ scrapy.utils.log] INFO: Scrapy 1.4.0 gestartet (bot: crawlers) 2017-12-19 22:55:17 [scrapy.utils.log] INFO: Überschriebene Einstellungen: {'DUPEFILTER_CLASS': 'scrapy_splash .SplashAwareDupeFilter ',' CONCURR ENT_REQUESTS ': 10, 'NEWSPIDER_MODULE': 'crawlers.spiders', 'SPIDER_MODULES': [' crawlers.spiders'], 'ROBOTSTXT_OBEY': Stimmt, 'COOKIES_ENABLED': False 'BOT_NAME': 'Crawler', 'HTTPCACHE_STORAGE': 'scrapy_splash.SplashAwareFSCacheStorage'} 2017.12.19 22.55.17 [scrapy.middleware] INFO: Aktiviert Erweiterungen: [ 'scrapy.extensions.telnet.TelnetConsole', ‚scrapy.extensions. logstats.LogStats ', ' scrapy.extensions.memuse.MemoryUsage ', ' scrapy.extensions.corestats.CoreStats '] 2017-12-19 22:55:17 [scrapy.middleware] INFO: Downloader-Middleware aktiviert: ['scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware', '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.redirect.RedirectMiddleware', 'scrapy_splash.SplashCookiesMiddleware', 'scrapy_splash.SplashMiddleware', 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware', "scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware", 'Scrapy.downloadermiddlewares.stats.DownloaderStats'] 2017.12.19 22.55.17 [scrapy.middleware] INFO: Aktivierte spider Middle: [ 'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware' 'scrapy_splash.SplashDeduplicateArgsMiddleware' , 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware', 'scrapy.spidermiddlewares.referer.RefererMiddleware', 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware', 'scrapy.spidermiddlewares.depth.DepthMiddleware'] 2017.12.19 22:55:17 [scrapy.Middleware] INFO: Aktivierte Artikel-Pipelines: ['scrapy.pipelines.images.ImagesPipeline'] 2017-12-19 22:55:17 [scrapy.core.engine] INFO: Spinne eröffnet 2017-12-19 22:55 : 17 [scrapy.extensions.logstats] INFO: Crawlen 0 Seiten (bei 0 Seiten/Minute), geschabt 0 Einzelteile (bei 0 Einzelteilen/Minute) 2017-12-19 22:55:17 [scrapy.extensions. telnet] DEBUG: Telnet-Konsole hört auf 127.0.0.1:6023 2017-12-19 22:55:20 [scrapy.core.engine] DEBUG: Crawled (200) https://www.vestiairecollective.com/robots.txt > (Referer: Keine) 2017-12-19 22:55:22 [scrapy.core.engine] DEBUG: Crawled (403) http: // localhost: 8050/robots.txt> (Referrer: Keine) 2017- 12-19 22:55:23 [scrapy.core.engine] DEBUG: Crawled (403) https://www.vestiairecollective.com/men-clothin g/Jeans/via http://localhost:8050/render.html> (referer: None) 2017.12.19 22.55.23 [scrapy.spidermiddlewares.httperror] INFO Ignoriert Antwort https://www.vestiairecollective.com/men-clothing/jeans/>: HTTP-Statuscode nicht behandelt wird oder nicht, erlaubt 2017-12-19 22:55:23 [scrapy.core.engine] INFO: Schließen Spinne (fertig) 2017-12-19 22:55:23 [scrapy.statscollectors] INFO: Dumping Scrapy stats: { 'downloader/request_bytes': 1254, 'downloader/anfrage_count': 3, 'downloader/request_method_count/GET': 2, 'downloader/anfrage_method_count/POST': 1, 'downloader/response_bytes': 2793, 'downloader/response_count ': 3, ' downloader/response_status_count/200 ': 1, ' Downloader/response_status_count/403 ': 2,' finish_reason ': ' Fertig ',' Fertigstellungszeit ': datetime.datetime (2017, 12, 19, 20, 55, 23, 440598), 'httperror/response_ignored_count': 1, 'httperror/antwort_ignored_status_count/403': 1, 'log_count/DEBUG': 4, 'log_count/INFO': 8, 'memusage/max': 53850112, 'memusage/startup' : 53850112, 'response_received_count': 3, 'scheduler/dequeued': 2, 'scheduler/dequeued/speicher': 2, 'scheduler/enqueued': 2, 'scheduler/eingereiht/speicher': 2, 'splash /render.html/request_count ': 1, ' splash/render.html/response_count/403 ': 1,' start_time ': datetime.datetime (2017, 12, 19, 20, 55, 17, 372080)} 2017 -12-19 22.55.23 [scrapy.core.engine] INFO: Spinne geschlossen (fertig)

+0

Haben Sie 'ROBOTSTXT_OBEY = False' in Scrapys' settings.py' versucht? –

+0

Auch aus der Splash-Dokumentation: 'Vergessen Sie nicht, wenn Sie eine Docker-Maschine unter OS X oder Windows verwenden, müssen Sie dies auf die IP-Adresse der virtuellen Maschine von Docker setzen, zB: SPLASH_URL = ' http://192.168.59.103:8050/ ' ' –

+0

Mit' ROBOTSTXT_OBEY = False' Ich habe das gleiche Problem –

Antwort

1

Das Problem war in User-Agent. Viele Websites benötigen es für den Zugriff. Der einfachste Weg, um auf die Website zuzugreifen und ein Verbot zu vermeiden, besteht darin, diese Bibliothek zu verwenden, um den Benutzer-Agenten zu randomisieren. https://github.com/cnu/scrapy-random-useragent