最近写爬虫的时候遇到了一个问题,爬一个专利网站,主要工作流是先把列表页下所有的专利包括专利号、专利名称、URL放到数据库的一个文档info中,再抽取info中的URL进行爬取详情页,爬取列表页的信息做了一个去重,爬一个就在数据库里查一个。。效率就不提了(另一种我能想到的方法是先用线程池爬取一遍,把单个字典放入一个列表中,再采用set去重,但是线程池似乎没法返回子线程的值?),之后在详情页爬取工作的时候,去重遇到了问题(当然也是set去重),就是,最好是根据专利号来去重,而不是URL,因为详情页的URL可能会有变化,因此就多了如下很多代码:

 1      rest_infos = self.obj.get_more_infos()#Mongoengine的查询对象
 2         rest_texts = self.obj.get_more_texts()#同上
 3         rest_urls = set()#先定义一个集合
 4         '''根据查询条件获得的列表页专利信息,包括url和专利号'''
 5         patents_infos_urls = [item.patent_url for item in rest_infos]#详情页URL,表1
 6         patents_infos_nums = [item.patent_num for item in rest_infos]#详情页专利号,表2
 7         dict_infos = dict(map(lambda x,y:[x,y],patents_infos_nums,patents_infos_urls))#合成一个字典1{'专利号':'URL'}
 8         '''专利详情页文档下的所有专利信息,包括url和专利号,同上操作'''
 9         patents_texts_urls = [item.Patent_url for item in rest_texts]
10         patents_texts_nums = [item.Patent_num for item in rest_texts]
11         dict_texts = dict(map(lambda x,y:[x,y],patents_texts_nums, patents_texts_urls))#字典2
12         for item in (set(dict_infos)-set(patents_texts_nums)):#遍历字典1的键和字典2的键的差集
13             for k,v in dict_infos.items():在列表页的字典里遍历
14                 if item == k:#如果查到那个差集里的某个专利名在列表页里面
15                     rest_urls.add(v)#就把它添加到最终的URL集合里面,之后针对这个集合里的URL,做线程池爬取

但是感觉这种方法还是太麻烦,因为现在学到的东西还是太少,继续努力。

——————————————————————————

这里还有一个问题要注意,列表页数据库里面的专利号是Int格式,所以详情页的专利号也要存成Int

转载于:https://www.cnblogs.com/yqpy/p/8626696.html

MongoDB数据库去重相关推荐

  1. mongodb 去重查询 Java,mongodb篇二:mongodb克隆远程数据库,去重查询的命令及对应java语句...

    另外附上mongodb eclipse插件地址: http://www.jumperz.net/update/ import java.net.UnknownHostException;import ...

  2. 二、mongodb数据库系列——聚合操作 索引操作 权限管理

    一.mongodb的聚合操作 学习目标 了解 mongodb的聚合原理 掌握 mongdb的管道命令 掌握 mongdb的表达式 1 mongodb的聚合是什么 聚合(aggregate)是基于数据处 ...

  3. 一、mongodb数据库系列——介绍和安装 简单使用 增删改查

    一.Mongodb的介绍和安装 学习目标 了解 非关系型数据库的优势 了解 mongodb的安装 1. mongodb的介绍 1.1 什么是mongodb mongodb 是一个功能最丰富的NoSQL ...

  4. MongoDB数据库(二):增删查改

    MongoDB数据库的增删查改 1.插入数据 语法: db.集合名称.insert(document) db.table_name.insert({name:'gj',gender:1}) db.ta ...

  5. scrapy爬虫之爬取百度手机助手app信息并保存至mongodb数据库(附源码)

    声明: ​ 本文内容仅供学习python爬虫的同学用作学习参考!!! ​ 如有错误,请评论指出,非常感谢!!! 1.使用环境 python 3.8 scrapy 2.5 mongodb pycharm ...

  6. Mongodb数据库教程

    Mongodb数据库 目录 Mongodb数据库 mongodb的介绍 mongodb的安装 mongodb的简单使用 mongodb的增删改查 mongodb的索引操作 mongodb的权限索引 m ...

  7. Kafka实战 - 06 Kafka消费者:从指定Topic拉取工单处置记录信息并存入MongoDB数据库

    文章目录 1. 处置记录表 t_disposal_record 2. kafka 主题和消费者配置 3. 定义一个线程任务 KafkaTask 1. kafka Topic中的数据:KafkaDisp ...

  8. MongoDB数据库java配置使用

    MongoDB RDBMS vs NoSQL RDBMS - 高度组织化结构化数据 - 结构化查询语言(SQL) (SQL) - 数据和关系都存储在单独的表中. - 数据操纵语言,数据定义语言 - 严 ...

  9. 关于java的mongoDB插入去重以及高并发问题

    关于mongoDB插入去重以及高并发问题 最近在项目中碰到过向mongoDB插入数据去重问题.一开始我的想法直接用upsert,我的项目部分代码如下: //使用Upsert进行插入,如果存在就更新,不 ...

  10. mongodb数据库使用01、基础查询和数据类型介绍

    01.windows安装 --下载mongodb数据库,点击安装.配置环境即可 02.基本使用:启动  退出 !!!!!!在此之前一定要配置环境变量 !!!!!!如果之前多次配置其他数据库,这里应该基 ...

最新文章

  1. FFmpeg在Windows上设置dshow mjpeg编码+libyuv解码显示测试代码
  2. lua 多条件_【LUA】只需花费你半天时间
  3. 学术写作利器——LaTeX入门笔记整理(不定期更新,附加使用心得)
  4. boost::mp11::mp_eval_if_q相关用法的测试程序
  5. python dict相加_Python合并字典操作时同key的value应该如何相加
  6. idea 2020和2017下载
  7. 无语!JDK 8 中的 HashMap 依然会死循环…
  8. python备份目录下文件夹_python---备份目录和文件
  9. UVA 10369 - Arctic NetWork (求最小生成树)
  10. Spark——Spark Project Tungsten深入解析
  11. Tomcat任意文件读取 文件包含漏洞复现(CVE-2020-1938/CNVD-2020-10487)
  12. eclipse,wtp配置
  13. IFD6500_USB转串口驱动
  14. c语言英语教学大纲,C语言教学大纲.doc
  15. 说一说关于破解支付宝AR红包的事
  16. 企业公众号怎么做内容?这四个阶段要做好
  17. 【OpenGL】(step1)开个窗口
  18. 成长部落# 编辑推荐 Python 入门学习内容系列
  19. 谷歌浏览器英文页面翻译成中文<配置方式>
  20. 快递100快递java_使用快递100 查询链接实现快速查询的示例

热门文章

  1. Linux操作系统思维导图
  2. C语言从入门到不放弃---编程环境的搭建到上手写代码
  3. 期货反跟单软件介绍与反跟单交易中的骗局
  4. QTTabBar功能是灰色,无法启用的解决办法
  5. H3C AC:短信认证配置
  6. 常用SqlHelper类(C#)
  7. 性能测试流程及数据分析
  8. mescroll.js 的下拉刷新和上拉加载 tab切换
  9. 六万字 HTTP 必备知识学习,程序员不懂网络怎么行,一篇HTTP入门 不收藏都可惜
  10. 电脑开机主板报警1长2短是怎么回事?