Scrapy 爬取旅游景点相关数据(七):利用指纹实现“不重复爬取”

本期学习: 利用网页指纹去重

众所周知,代理是要花钱的,那么在爬取(测试)巨量网页的时候,就不可能对已经爬取过的网站去重复的爬,这样会消耗大量的时间,更重要的是会消耗大量的IP (=金钱 💵)

1 指纹机制

所谓指纹,就是把网页的数据生成一个唯一性的数据,相当于程序给每个网页留了个痕迹,爬取过的网页,留下指纹,那下次只要比对一下我们指纹库:有的,就直接跳过,那就不存在重复爬取的问题了;没有的,爬取数据,留下指纹。这个机制非常适合我们这个使用了selenium来进行翻页的scrapy工程。

2 指纹实现

首先在爬虫初始化__init__的时候增加一个指纹文件:

python 复制代码
        self.fp_file = 'fingerprints.json'

然后在 start_requests 判断这个文件是否存在,不存在的话需要创建,注意到以列表形式存储:

python 复制代码
      	#创建指纹存储文件
        if not os.path.exists(self.fp_file):
            with open(self.fp_file, 'w') as f:
                json.dump([], f)

然后实现指纹的3个方法

python 复制代码
    # 生成指纹
    def get_fingerprint(self, page_content):
        return md5(page_content.encode('utf-8')).hexdigest()

    # 判断指纹是否存在
    def fingerprint_exists(self, fingerprint):
        with open(self.fp_file, 'r') as f:
            fingerprints = json.load(f)
            return fingerprint in fingerprints

    # 保存指纹
    def save_fingerprint(self, fingerprint):
        with open(self.fp_file, 'r+') as f:
            fingerprints = json.load(f)
            fingerprints.append(fingerprint)
            f.seek(0)
            json.dump(fingerprints, f)
            f.truncate()

最后一步,添加到爬取的逻辑中,这边尝试添加在parse_page (不清楚的话需要回看前几期的博客文章)

python 复制代码
        # 生成指纹
        fingerprint = self.get_fingerprint(page_source)
        # 判断指纹是否存在
        if self.fingerprint_exists(fingerprint):
            self.logger.info('指纹已存在,跳过 %s', fingerprint)
            return

        # 保存指纹
        self.save_fingerprint(fingerprint)

3 测试

测试的时候先爬去一下,检查下fingerprints.json是否生成了,然后等待爬虫爬取一段时间,看json文件中指纹数据是否有增加,然后停止爬虫,重新开始,测试指纹能否帮助跳过已经爬取过的页面。

测试截图如下,发现可以生效的。如果不跳过,则item代码会去比较数据库中是否存在这个评论,这里却没有这个过程,说明通过指纹对比,把已经爬取过的页面跳过了

相关推荐
Bigcrab__15 小时前
Python3网络爬虫开发实战(15)Scrapy 框架的使用(第一版)
爬虫·python·scrapy
Bigcrab__2 天前
Python3网络爬虫开发实战(16)分布式爬虫(第一版)
爬虫·scrapy
B站计算机毕业设计超人9 天前
计算机毕业设计PySpark+Django深度学习游戏推荐系统 游戏可视化 游戏数据分析 游戏爬虫 Scrapy 机器学习 人工智能 大数据毕设
爬虫·深度学习·scrapy·django·课程设计·数据可视化·推荐算法
B站计算机毕业设计超人10 天前
计算机毕业设计Python电影评论情感分析 电影可视化 豆瓣电影爬虫 电影推荐系统 电影数据分析 电影大数据 大数据毕业设计 机器学习 深度学习 知识图谱
大数据·爬虫·python·深度学习·scrapy·机器学习·数据可视化
晓时谷雨13 天前
python scrapy爬虫框架 抓取BOSS直聘平台 数据可视化统计分析
爬虫·python·scrapy·pandas·数据可视化
天启代理ip15 天前
Scrapy添加代理IP池:自动化爬虫的秘密武器
tcp/ip·scrapy·自动化
金灰21 天前
scrapy--子类CrawlSpider&中间件
开发语言·网络·python·scrapy·安全·中间件
天涯幺妹21 天前
Python网络爬虫模拟登录与验证解析
爬虫·python·scrapy·网络安全·pycharm·beautifulsoup·pygame
github_czy22 天前
scrapy学习笔记0828-上
笔记·学习·scrapy