2017-11-03 1 views
1

Ich habe eine Spinne geschrieben, um Details aus http://allevents.in zu holen. Jedes Mal, wenn ich verschrotten versucht, ich bin ein AntworttextFehlermeldung "Zu viele Anfragen" beim Scrapen einer bestimmten Website mit scrapy

Too many requests, please try after some time or report this problem at [email protected] 

Ich habe versucht, immer auch den Shell-Befehl.

scrapy shell 'http://allevents.in/new%20delhi/all' 

Aber noch bin ich die gleiche Antwort für response.body bekommen. Ich habe andere Websites wie amazon versucht, die gut funktioniert. Auch die obige URL kann mit requests sowie urllib.urlopen() abgerufen werden.

Hier ist meine settings.py Datei

# -*- coding: utf-8 -*- 

# Scrapy settings for tutorial project 
# 
# For simplicity, this file contains only settings considered important or 
# commonly used. You can find more settings consulting the documentation: 
# 
#  http://doc.scrapy.org/en/latest/topics/settings.html 
#  http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html 
#  http://scrapy.readthedocs.org/en/latest/topics/spider-middleware.html 

BOT_NAME = 'tutorial' 

SPIDER_MODULES = ['tutorial.spiders'] 
NEWSPIDER_MODULE = 'tutorial.spiders' 


# Crawl responsibly by identifying yourself (and your website) on the user-agent 
#USER_AGENT = 'tutorial (+http://www.yourdomain.com)' 

# Obey robots.txt rules 
ROBOTSTXT_OBEY = True 

# Configure maximum concurrent requests performed by Scrapy (default: 16) 
# CONCURRENT_REQUESTS = 1 

# Configure a delay for requests for the same website (default: 0) 
# See http://scrapy.readthedocs.org/en/latest/topics/settings.html#download-delay 
# See also autothrottle settings and docs 
DOWNLOAD_DELAY = 5 
# The download delay setting will honor only one of: 
CONCURRENT_REQUESTS_PER_DOMAIN = 1 
CONCURRENT_REQUESTS_PER_IP = 1 

# Disable cookies (enabled by default) 
COOKIES_ENABLED = False 

# Disable Telnet Console (enabled by default) 
# TELNETCONSOLE_ENABLED = False 

# Override the default request headers: 
# DEFAULT_REQUEST_HEADERS = { 
# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
# 'Accept-Language': 'en', 
# } 

# Enable or disable spider middlewares 
# See http://scrapy.readthedocs.org/en/latest/topics/spider-middleware.html 
#SPIDER_MIDDLEWARES = { 
# 'tutorial.middlewares.TutorialSpiderMiddleware': 543, 
#} 

# Enable or disable downloader middlewares 
# See http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html 
# DOWNLOADER_MIDDLEWARES = { 
# # 'tutorial.middlewares.MyCustomDownloaderMiddleware': 543, 
#  'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': None, 
#  # 'tutorial.middlewares.ProxyMiddleware': 100, 
# } 

# Enable or disable extensions 
# See http://scrapy.readthedocs.org/en/latest/topics/extensions.html 
#EXTENSIONS = { 
# 'scrapy.extensions.telnet.TelnetConsole': None, 
#} 

# Configure item pipelines 
# See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html 
#ITEM_PIPELINES = { 
# 'tutorial.pipelines.TutorialPipeline': 300, 
#} 

# Enable and configure the AutoThrottle extension (disabled by default) 
# See http://doc.scrapy.org/en/latest/topics/autothrottle.html 
AUTOTHROTTLE_ENABLED = True 
# The initial download delay 
AUTOTHROTTLE_START_DELAY = 5 
# The maximum download delay to be set in case of high latencies 
AUTOTHROTTLE_MAX_DELAY = 60 
# The average number of requests Scrapy should be sending in parallel to 
# each remote server 
AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0 
# Enable showing throttling stats for every response received: 
AUTOTHROTTLE_DEBUG = False 

# Enable and configure HTTP caching (disabled by default) 
# See http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings 
# HTTPCACHE_ENABLED = True 
# HTTPCACHE_EXPIRATION_SECS = 0 
# HTTPCACHE_DIR = 'httpcache' 
#HTTPCACHE_IGNORE_HTTP_CODES = [] 
# HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage' 

ich ein Anfänger in scrapy bin. Bitte helfen Sie

+0

Grundsätzlich allEvents sie Ihre scrapper haben aufgespürt müssen und als vorbeugende Maßnahme Sie haben möglicherweise die IP-Adresse Ihres Quellsystems blockiert. Es ist nichts falsch an Ihrem Ende seines allvenents Service, die Ihre Spinne deaktiviert hat. Sie können Ihre IP ändern und prüfen, ob es für Sie möglich ist. –

+0

Ich habe es mit einer anderen IP versucht. Aber immer noch die gleiche Ausgabe @MaheshKaria –

+0

Es gibt viel mehr Dinge sind in Betracht gezogen, wie Client-Typ, Anfragen etc, so dass wir an diesem Punkt wirklich nicht alle Kriterien, warum sie blockiert haben. –

Antwort

1

Versuchen Sie, ein Zeitlimit zwischen Ihren Anforderungen zu setzen, um die Website nicht zu verletzen. Wenn Sie zu viele Anfragen in so kurzer Zeit ausführen, kann dies dazu führen, dass die Website sie blockiert.

+0

Es gibt nur eine Anfrage, wenn ich 'scrapy shell 'http: // alleevents.in/new% 20delhi/all'' @Lostario anrufen –

+0

Es gibt viele Scrapy-Konfigurationen, nur um es zu tun. Benutze niemals Dinge wie "time.sleep (x)", solange du dir nicht hundertprozentig sicher bist, was du tust. Verwenden Sie es nie, um die Zeit zwischen den Anfragen zu kontrollieren! – Djunzu

3

Scrapy verwendet mehrere gleichzeitige Anfragen (standardmäßig 8), um die von Ihnen angegebenen Websites zu verwerfen. Es scheint, dass alleevents.in nicht gefällt, wenn Sie es zu sehr treffen.

Höchstwahrscheinlich Ihre Lösung wird eine der folgenden Konfigurationsoptionen festlegen:

  • CONCURRENT_REQUESTS_PER_DOMAIN (standardmäßig 8, versuchen, eine kleinere Zahl verwenden)
  • CONCURRENT_REQUESTS_PER_IP (Standard: 0, überschreibt die vorherigen ein, wenn auf eine positive Zahl gesetzt) ​​

Alternativ können Sie auch die AutoThrottle extension verwenden.

+0

Wie kann ich das einstellen? Ich habe versucht, mit scrapy Shell @yorah –

+1

Sie können Befehlszeilenoptionen auf die Scrapy-Shell mit dieser Syntax übergeben: scrapy shell -s CONCURRENT_REQUESTS_PER_DOMAIN = '8' http: // ... – yorah

+1

Auch, wenn Sie die Scrapy-Shell aus starten Ihr Projektpfad, dann sollten Ihre Projekteinstellungen automatisch verwendet werden. – yorah

1

Hallo versuchen im settings.py die CONCURRENT_REQUESTS = 1 zuweisen und diese schrittweise zu steigern, wenn Sie es funktioniert sehen, ob das immer noch die gleiche Warnung versuchen erhält einen höheren DOWNLOAD_DELAY

Einstellung
Verwandte Themen