【爬虫】 使用mongodb做去重集合

博客讲述因url量级达亿以上,Redis内存飙升至22G,服务器无法承受,于是将去重集合从Redis迁移到MongoDB。解决方法包括通过脚本迁移,对url哈希缩短长度、插入数据时建立索引,还可通过特定链接方法限制MongoDB内存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:最初是用redis数据库中的set来做去重集合的,但是因为url的量级在亿以上,redis内存飙升到了22G,服务器无法承受。于是将集合都搬到了mongodb中

解决方法:

1. 通过脚本对redis中的集合进行迁移,

    <1  对url进行哈希,缩短长度,节省空间。

    <2  在插入数据到mongo的时候, 要写好索引 (为了加快遍历速度,因为每访问一次url, 就需要遍历一遍去重表来比对)

     

        url_hash = computeMD5hash(self.main_url)
        obj = {"urlhash": url_hash}
        is_exist = self.fingure.find_one(obj)
        if not is_exist:
            self.fingure.create_index("urlhash")
            self.reddb.lpush(self.queue, self.main_url)
            #self.reddb.sadd(self.fingure, self.main_url)
            self.fingure.insert_one(obj)

  第一行 就是一个 hash加密方法, 可以自己写。   比较重要的就是create_index方法,用来建立索引

2. 限制mongo的内存,这也是我们的初衷。具体方法:  https://www.cnblogs.com/luo-mao/p/5872388.html

 

大家有需要或者有啥不懂的,可以留言。。。  写来基本是都是给以后都自己看的,。所以写的比较马虎。

使用MongoDB存储爬虫当当网图书畅销榜是一个常见的数据存储方案。MongoDB是一种NoSQL数据库,具有高扩展性和灵活性,非常适合存储非结构化或半结构化数据。以下是使用MongoDB存储爬虫当当网图书畅销榜的步骤和注意事项: ### 步骤: 1. **环境准备**: - 安装MongoDB:确保在本地或服务器上安装并配置好MongoDB。 - 安装爬虫工具:可以使用Python的Scrapy框架或其他爬虫工具。 2. **爬虫开发**: - 编写爬虫代码:从当当网抓取图书畅销榜数据。 - 数据清洗:处理抓取到的数据,确保数据的完整性和准确性。 3. **数据存储**: - 连接MongoDB使用Python的`pymongo`库或其他语言的相应库连接MongoDB。 - 创建数据库和集合:例如,创建一个名为`dangdang`的数据库和一个名为`bestsellers`的集合。 - 插入数据:将抓取到的数据插入到MongoDB中。 ### 示例代码(Python): ```python import pymongo import scrapy class DangdangSpider(scrapy.Spider): name = 'dangdang' start_urls = ['http://www.dangdang.com/'] def parse(self, response): # 解析页面内容,提取图书信息 books = response.css('div.book-list div.book-item') for book in books: title = book.css('a.title::text').get() author = book.css('a.author::text').get() price = book.css('span.price::text').get() yield { 'title': title, 'author': author, 'price': price } # MongoDB配置 client = pymongo.MongoClient('mongodb://localhost:27017/') db = client['dangdang'] collection = db['bestsellers'] # 数据插入 def process_item(self, item, spider): collection.insert_one(dict(item)) return item ``` ### 注意事项: 1. **数据**:确保爬取的数据不复,可以使用MongoDB的唯一索引或程序逻辑。 2. **错误处理**:处理爬虫和数据库连接中的异常情况,确保程序的健壮性。 3. **性能优化**:根据数据量和访问频率,优化MongoDB的索引和分片配置,提高查询性能。 ### 优点: - **高扩展性**:MongoDB支持水平扩展,能够处理大规模数据。 - **灵活性**:不需要预先定义表结构,能够存储多种类型的数据。 - **高性能**:MongoDB的查询速度快,适合实时数据处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值