Я использую Python scrapy
(1.8.0), чтобы очистить некоторые данные и сохранить их в mongodb
с pymongo
.
. Это работает, когда я использую Python2
и более старую pymongo
версию.
Но когда я попытался использовать Python3
и pymongo 3.10.1
, я обнаружил, что вставка документа не работает.
Я обнаружил, что проблема связана с datetime
,
Вот так:
'releasedTime': [datetime.datetime(2020, 1, 17, 14, 30),datetime.datetime(2020, 1, 16, 18, 10),datetime.datetime(2020, 1, 17, 22, 0)]
Данные о дате поступают примерно так:
stripSingleTime = singleTime.strip() # 14:30
myTime = datetime.datetime.strptime(stripSingleTime, '%H:%M').time() # 14:30:00
myDateTime = datetime.datetime.combine(datetime.date.today(), myTime) # 2020-01-17 14:30:00
# x is my for loop argument
myDateTimeArray[x].append(myDateTime) # [[datetime.datetime(2020, 1, 17, 14, 30)], []]
Вот примерно insert_one
:
import pymongo
from pymongo import MongoClient
from scrapy.utils.project import get_project_settings
settings = get_project_settings()
import datetime
class MongoDBPipeline(object):
global theaters
theaters = []
def __init__(self):
connection = MongoClient(
settings['MONGODB_SERVER'],
settings['MONGODB_PORT'])
self.db = connection[settings['MONGODB_DB']]
self.collection = self.db[settings['MONGODB_COLLECTION']]
def open_spider(self, spider):
print ('Pipelines => open_spider =>', spider)
def process_item(self, item, spider):
global theaters
self.collection = self.db[type(item).__name__.replace('_Item','')]
if item['theater'] not in theaters:
theaters.append(item['theater'])
self.collection.remove({'theater': item['theater']})
# self.collection.insert_one(mydict) is working
mydict = { 'name': 'RUNOOB', 'alexa': '10001', 'url': 'https://www.runoob.com' }
test = {
'geometry': {'coordinates': [120.196866, 22.99322], 'type': 'Point'},
'phone': '06-2205151',
'theater': 'TodayTainan',
'movie': [{
'enName': 'The Lion King',
'goodMinePoint': 0.75,
'imdbScore': '8.5',
'photoHref': 'https://movies.yahoo.com.tw/x/r/w420/i/o/production/movies/June2019/M07RYsvcBWpi3xJtjCQF-2714x3878.jpg',
'releasedTime': [datetime.datetime(2020, 1, 17, 14, 30)],
'rottenScore': '93%',
'videoId': ['MQuUkET0lQg', 'he2rj_8XwsE']
}]
}
self.collection.insert_one(test) # insert the dummy object test is not working
self.collection.create_index([("geometry", pymongo.GEOSPHERE)])
return item
Почему self.collection.insert_one(test)
не работает?
Я думаю, что-то не так между pymongo
и mongodb
. Они не имеют дело с моим datetime
.
. Любая помощь будет принята с благодарностью. Спасибо.