mongodb数据库去重命名_数据库数据去重语句

mongodb数据库去重命名_数据库数据去重语句  最近写爬虫的时候遇到了一个问题,爬一个专利网站,主要工作流是先把列表页下所有的专利包括专利号、专利名称、URL放到数据库的一个文档info中,再抽取info中的URL进行爬取详情页,爬取列表页的信息做了一个去重,爬一个就在数据库里查一个。。效率就不提了(另一种我能想到的方法是先用线程池爬取一遍,把单个字典放入一个列表中,再采用set去重,但是线程池似乎没法返回子线程的值?),之后在详情页爬取工…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

  最近写爬虫的时候遇到了一个问题,爬一个专利网站,主要工作流是先把列表页下所有的专利包括专利号、专利名称、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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187290.html原文链接:https://javaforall.net

(0)
上一篇 2022年9月30日 下午11:36
下一篇 2022年9月30日 下午11:36


相关推荐

  • Cursor教育优惠非学生也能蹭~Cursor Pro 免费一年最新教程,亲测有效

    Cursor教育优惠非学生也能蹭~Cursor Pro 免费一年最新教程,亲测有效

    2026年3月16日
    2
  • 算法笔记 4.3 递归 ——谢尔宾斯基地毯「建议收藏」

    算法笔记 4.3 递归 ——谢尔宾斯基地毯「建议收藏」算法笔记递归谢尔宾斯基地毯

    2022年7月13日
    24
  • Java线程池参数分析「建议收藏」

    Java线程池参数分析「建议收藏」线程池组成创建线程池创建线程池通过Executors的工厂方法来创建线程池实例。实际上Executors创建的线程池实例最终都是通过实例化配置不同参数的ThreadPoolExecutor对象。 publicstaticExecutorServicenewFixedThreadPool(intnThreads){returnnewThreadPoolEx…

    2022年6月3日
    37
  • Bluez java_Bluez相关的各种tools的使用

    Bluez java_Bluez相关的各种tools的使用7.1BccmdBccmd是用来和CSR的芯片进行BCCMD(Bluecorecommandprotocol)通讯的一个工具。BCCMD并非蓝牙协议栈的标准,而是CSR芯片的专属协议Bccmd的调用格式为:bccmd[-t][-d][]Tansport类型包括HCIUSBBCSPH4等,常用的估计就是HCI和BCSP两种。需要注意一下他们的使用场合:HCI是…

    2025年5月22日
    5
  • -7的补码用计算机,补码计算器-计算机求补码

    -7的补码用计算机,补码计算器-计算机求补码在计算机中 负数以其正值的补码形式表达 什么叫补码呢 这得从原码 反码说起 原码 一个整数 按照绝对值大小转换成的二进制数 称为原码 5 的反码 将二进制数按位取反 所得的新二进制数称为原二进制数的反码 取反操作指 原为 1 得 0 原为 0 得 1 1 变 0 0 变 1 比如 将每一位取反 的反码 反码是相互的 所以也可称 和互为反码 补码 反码加 1 称为补码 也就是说 要得到一个数的补码 先得到反码 然后将

    2026年3月26日
    2
  • 初识Caffeine

    初识Caffeine缓存在日常开发中启动至关重要的作用 由于是存储在内存中 数据的读取速度是非常快的 能大量减少对数据库的访问 减少数据库的压力 我们把缓存分为两类 分布式缓存 例如 Redis 优点 存储容量更大 可靠性更好 可以在集群间共享 缺点 访问缓存有网络开销 场景 缓存数据量较大 可靠性要求较高 需要在集群间共享 进程本地缓存 例如 HashMap GuavaCache 优点 读取本地内存 没有网络开销 速度更快 缺点 存储

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号