在使用爬虫爬取网页信息的时候,如果只爬取固定的网页还好,但是如果从一个网页的源码中解析出其他的链接,爬虫爬取到其他的网页,这样就会出现一个问题,如何确定这个网页我爬取过,如何设置爬取的网页不再爬取。
本篇文章实现避免重复爬取的思路是:将爬取过的网页的链接和该网页的信息以键值对的形式保存到数据库中,当爬虫爬取一个网页之前,先从数据库中查找是否有该网页的爬取记录,如果有该网页的爬取记录,那么就说明该网页已爬取过,就不需要再爬取该网页了,否则就证明这个网页没有爬取过,继而爬取这个网页的内容。
使用Mongodb数据库
因为Mongodb数据库是文档型数据库,因此在实现避免重复爬取的机制中我们可以将网页的链接作为key,将网页爬取的内容作为value存储到数据库中,每一个链接对应该链接爬取的内容,这样在爬取一个新的链接就能从数据库中查找该链接是否已经爬取过。因此在这里需要使用Mongodb数据库来保存爬取的链接与爬取的内容。
python连接Mongodb数据库需要用到pymongo,没有安装可以使用pip install pymongo安装。Mongodb安装也很简单,这里我就不介绍Mongodb数据库的安装方法了。
代码思路:1.初始化设置各种参数,连接数据库 2.重写__setitem__方法将爬取的链接与内容以键值对的形式存储到数据库3. 重写__getitem__方法,用来查询爬取的链接对应的内容 4.重写__contains__,用来判断数据库中是否存在需要爬取的链接5.删除数据库,清除数据。
from pymongo import MongoClient
from datetime import dat