14db = client.Douban 15mongo_collection = db.douban 16 17for i in data: 18 mongo_collection.insert_one(i)
插入第一个 list :

插入第二个 list :

你会发现,重复的数据 A 被插入进去了,那么怎么只插入 D,而不插入 A 呢,这里就要用到 update\_one() 方法了,改写一下插入方法:
1for i in data2: 2 mongo_collection.update_one(i,{'$set':i},upsert=True)

这里用到了 `$set` 运算符,该运算符作用是将字段的值替换为指定的值,upsert 为 True 表示插入。这里也可以用 update() 方法,但是这个方法比较老了,不建议使用。另外尝试使用 update\_many() 方法发现不能更新多个相同的值。
1for i in data2: 2 mongo_collection.update(i, i, upsert=True)
下面举一个豆瓣电影 TOP250 的实例,假设我们先获取 10 个电影的信息,然后再获取前 20 个电影,分别用 insert\_one() 和 update\_one() 方法对比一下结果。
insert\_one() 方法会重复爬取前 10 个电影,最终生成 30 个数据:

update\_one() 方法则只会插入新的 10 个电影,最终生成 20 个数据:

这就很好了对吧,所以当我们去爬那些需要分页的网站,最好在爬取之前使用 update\_one() 方法,这样就算爬虫中断了,也不用担心会爬取重复数据。
代码实现如下:
1import requests 2import json 3import csv 4import pandas as pd 5from urllib.parse import urlencode 6import pymongo 7 8client = pymongo.MongoClient('localhost', 27017) 9db = client.Douban 10mongo_collection = db.douban 11class Douban(object): 12 def init(self): 13 self.url = 'api.douban.com/v2/movie/to…?' 14 15 def get_content(self, start_page): 16 params = { 17 'start': start_page, 18 'count': 10 19 } 20 response = requests.get(self.url, params=params).json() 21 movies = response['subjects'] 22 data = [{ 23 'rating': item['rating']['average'], 24 'genres':item['genres'], 25 'name':item['title'], 26 'actor':self.get_actor(item['casts']), 27 'original_title':item['original_title'], 28 'year':item['year'], 29 } for item in movies] 30 31 self.write_to_mongodb(data) 32 33 def get_actor(self, actors): 34 actor = [i['name'] for i in actors] 35 return actor 36 37 def write_to_mongodb(self, data): 38 for item in data: 39 if mongo_collection.update_one(item, {'$set': item}, upsert=True): 40 # if mongo_collection.insert_one(item): 41 print('存储成功') 42 else: 43 print('存储失败') 44 45 def get_douban(self, total_movie): 46 # 每页10条,start_page循环1次
现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。
分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习