爬虫入门(三)连接mongodb

连接mongodb

虽然说我们前面写了一个比较健壮的爬虫了,但是人生难免有意外,万一中断了,我们又要重新开始爬虫下载图片了,抓狂!那么我们想呢,怎么写一个判断图片有没有下载过呢?显然我们不能在文件夹里遍历….会慢到爆炸的,那么我们就可以借助数据库来实现去重啦
环境 ubuntu 16.04 python3.6.1 数据库mongodb
mongodb的一些基本操作在前面的博文有哟可以去看看或者自行百度
就讲几个常用的操作吧
show dbs 这是进入mongo的控制台后,查看有哪些数据库

use xxx 进入mongo控制台后,进入哪些数据库

show collections 查看当前你进入的数据库有多少个集合

db.xxx.stats() 进入控制台后,查看当前集合的状态

db.xxx.find() 查看当前集合的所有数据,默认显示20条

db.xxx.find(xxxx) 查找数据,没有返回None
导入mongo的库 from pymongo import MongoClient
在程序中呢我们先写一个初始化函数来获得数据库的连接,顺便把之前的jpg_download_list和url都放进去了
def __init__ (self):
    self.client = MongoClient()
    self.db = self.client['mzituPic']
    self.collection = self.db['mzitu']
    self.jpg_download_list = []
    self.base_url = 'http://www.mzitu.com'
前面三段代码的意思呢就是首先获得Mongo的监听,然后我们进入mzituPic这个数据库,然后获取这个数据库中的mzitu集合,很好理解吧?
然后呢我们在getAllJpg_Info()这个函数加入一下数据库
    for jpgpage in range(1,int(total)+1):
        now_url = '{}/{}'.format(url,jpgpage)
        selector = html.fromstring(self.GetRespon(now_url,10).text)
        try:
            s = selector.xpath('//div[@class="main-image"]/p/a/img/@src')[0]
        except:
            continue
        if self.collection.find_one({'url':s}):
            print(u'这个图片已被爬取,跳过')
        else:
            self.jpg_download_list.append(s)
            self.collection.insert({'主题':title,'url':s})
代码也很好理解 ,就爬去图片的下载地址之后和数据库中的数据找一下,如果有一样的那么我们就跳过了,否则就加进数据库中
程序运行的时候我们可以小小查看一下数据库的情况

1

2

这样呢我们就简单的实现了一个能去重的爬虫啦,利用数据库能完成非常多的功能,留给你们实现吧
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值