json - Scrapinghub 将我的结果插入日志而不是项目
问题描述
我有一个正常运行的蜘蛛项目来提取 urls 内容(没有 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\",
解决方案
从您的设置文件看来,没有可供 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'
推荐阅读
- python - 为什么在准确率不变的情况下损失会减少?
- json - 比特币 RPC 身份验证问题 - regtest
- reactjs - createDrawerNavigator 和后退按钮
- python - 预期类型“int”改为“float”
- javascript - 为什么不响应状态更新特定值?
- vb.net - 单击按钮后执行加载
- google-app-engine - 如何对 Web 应用的用户进行身份验证以访问仅与他们相关的 GCP 数据?
- javascript - vars 在 localStorage.getItem('key') 之后没有保持正确的值
- python - 在 Python 中为分类变量绘制数字 Y 轴、X 轴时间序列的最佳方法是什么?
- node.js - 为什么模块大部分时间都返回一个空白对象?