Scrapinghub включает мои результаты в журнал, а не в элемент
У меня есть работающий проект паука для извлечения содержимого URL (нет CSS). Я просканировал несколько наборов данных и сохранил их в серии файлов.csv. Сейчас я пытаюсь настроить его на работу в Scrapinghub, чтобы в конечном итоге очистить его. Пока что я могу загрузить паука и работать на Scrapinghub. Моя проблема в том, что результат отображается в "журнале", а не в "элементе". Объем данных превышает емкость журнала и, следовательно, выдает ошибку. Как я могу настроить мой конвейер / экстрактор на работу и вернуть файл js или csv? Я счастлив с решением, которое имеет очищенные данные для отправки в базу данных. Как я не смог добиться этого тоже. Любое руководство приветствуется.
Паук:
class DataSpider(scrapy.Spider):
name = "Data_2018"
def url_values(self):
time = list(range(1538140980, 1538140820, -60))
return time
def start_requests(self):
allowed_domains = ["https://website.net"]
list_urls = []
for n in self.url_values():
list_urls.append("https://website.net/.../.../.../all/{}".format(n))
for url in list_urls:
yield scrapy.Request(url=url, callback=self.parse, dont_filter=True)
def parse(self, response):
data = response.body
items = positionsItem()
items['file'] = data
yield items
Трубопровод
class positionsPipeline(object):
def process_item(self, item, spider):
return item
Настройки
BOT_NAME = 'Positions'
SPIDER_MODULES = ['Positions.spiders']
NEWSPIDER_MODULE = 'Positions.spiders'
USER_AGENT = get_random_agent()
ROBOTSTXT_OBEY = True
CONCURRENT_REQUESTS = 32
DOWNLOAD_DELAY = 10
SPIDER_MIDDLEWARES = {
'Positions.middlewares.positionsSpiderMiddleware': 543,
}
DOWNLOADER_MIDDLEWARES = {
'Positions.middlewares.positionsDownloaderMiddleware': 543,
}
ITEM_PIPELINES = {
'Positions.pipelines.positionsPipeline': 300,
}
HTTPCACHE_ENABLED = True
HTTPCACHE_EXPIRATION_SECS = 0
HTTPCACHE_DIR = 'httpcache'
HTTPCACHE_IGNORE_HTTP_CODES = []
HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
предмет
class positionsItem(scrapy.Item):
file = scrapy.Field()
Журнал Scrapinghub показывает:
13: 2019-02-28 07:46:13 ERROR Rejected message because it was too big: ITM {"_type":"AircraftpositionsItem","file":"{\"success\":true,\"payload\":{\"aircraft\":{\"0\":{\"000001\":[null,null,\"CFFAW\",9.95729,-84.1405,9500,90,136,1538140969,null,null,\"2000\",\"2-39710687\",[9.93233,-84.1386,277]],\"000023\":[\"ULAC\",null,\"PH4P4\",
0 ответов
Из вашего файла настроек похоже, что нет предопределенного механизма вывода каналов для использования Scrapy. Странно, что в первый раз это сработало локально (при создании файла.csv).
В любом случае, вот дополнительные строки в settings.py, которые вам нужно добавить для работы Scrapy. Если вы просто хотите передать вывод локально в файл.csv:
# Local .csv version
FEED_URI = 'file://NAME_OF_FILE_PATH.csv'
FEED_FORMAT = 'csv'
Я также использую эту версию для загрузки файла json в ведро S3
# Remote S3 .json version
AWS_ACCESS_KEY_ID = YOUR_AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY = YOUR_AWS_SECRET_ACCESS_KEY
FEED_URI = 's3://BUCKET_NAME/NAME_OF_FILE_PATH.json'
FEED_FORMAT = 'json'