Я запускаю паук scmap для карты сайта, используя JOBSDIR, используя документацию здесь: https://docs.scrapy.org/en/latest/topics/jobs.html.
Однако я сделаю чистое завершение, ctrl + c (я дважды проверил несколько раз, это чистое завершение работыи я не посылаю ctrl + c дважды), и паук не сможет продолжить.В выводе будет указано «Отфильтрованный повторяющийся запрос: example.com/sitemap.xml», но в папке JOBSDIR по-прежнему будут загружаться невидимые запросы и файл очень большого размера request.queue.
Почему отфильтровывается фильтрация?исходная карта сайта вместо того, чтобы начинать с request.queue?Очевидно, что если он отфильтровывает единственный URL, который я предоставляю, карту сайта, он никогда никуда не денется.Есть идеи?
РЕДАКТИРОВАТЬ: Одна вещь, которую я делаю, это запуск моего паука из сценария Python, а не из командной строки Scrapy.При этом, возможно, я не передаю аргумент -s, который рекомендует scrapy.Что делает "-с"?Где документация для этого varaible?
process = CrawlerProcess({'JOBDIR': '.jobs/alexa_site_' + str(alexa_site_id)})
MySpider.set_settings(alexa_site)
MySpider.custom_settings[
'USER_AGENT'] = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36"
process.crawl(MySpider, alexa_site_id=alexa_site_id)
process.start()
Вот код паука:
class MySpider(SitemapSpider):
custom_settings = {
'RANDOMIZE_DOWNLOAD_DELAY': True,
'MEMUSAGE_ENABLED': True,
'DOWNLOAD_TIMEOUT': 20,
'DEPTH_LIMIT': 100000,
'LOG_LEVEL': 'CRITICAL',
'DOWNLOADER_MIDDLEWARES': {
'rotating_proxies.middlewares.RotatingProxyMiddleware': 610,
'rotating_proxies.middlewares.BanDetectionMiddleware': 620,
},
'ROTATING_PROXY_BAN_POLICY': 'spiders.classes.proxies.policy.MyPolicy',
'ROTATING_PROXY_PAGE_RETRY_TIMES': 20,
'ROTATING_PROXY_LOGSTATS_INTERVAL': 5,
'ROTATING_PROXY_CLOSE_SPIDER': True,
'RETRY_HTTP_CODES': [500, 502, 503, 504, 522, 524, 408, 403],
'DEPTH_PRIORITY': 1,
'SCHEDULER_DISK_QUEUE': 'scrapy.squeues.PickleFifoDiskQueue',
'SCHEDULER_MEMORY_QUEUE': 'scrapy.squeues.FifoMemoryQueue',
'TELNETCONSOLE_USERNAME': 'scrapy',
'TELNETCONSOLE_PASSWORD': 'scrapy',
'DUPEFILTER_DEBUG': True
}
name = None
allowed_domains = []
sitemap_urls = ['https://www.example.com/sitemap.xml']
def parse(self, response):
le = LinkExtractor()
links = le.extract_links(response)
for link in links:
yield response.follow(link.ur, self.parse)