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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • python2 手动安装更新pip

    python2 手动安装更新pip

    2021年10月22日
  • [VB.NET]圖片透明化[通俗易懂]

    [VB.NET]圖片透明化[通俗易懂]原URL:http://www.dotblogs.com.tw/chou/archive/2009/02/12/7120.aspx有沒有辦法做到圖片的透明化,我們可以透過MakeTransparent達成MSDN:Bitmap.MakeTransparent方法:為這個Bitmap將預設的透明色彩變為透明。 而在此程式中,加上了讓使用者點選顏色的功能,並且讓點

  • java输出乱码是什么问题_jsp获取request参数

    java输出乱码是什么问题_jsp获取request参数最近有个业务需要模拟表单提交到asp页面中,但是我的项目编码是UTF8,而asp页面是GB2312,中文字段提交后,到达数据库后是乱码.问题的解决在于模拟提交的时候置

  • 重建mbr要不要勾选_一键ghost重装系统步骤

    重建mbr要不要勾选_一键ghost重装系统步骤TFS2010迁移/重装/还原步骤 1.签入所有代码2.停止TFS服务:运行命令行,并将路径切换到TFS安装路径:C:\ProgramFiles\MicrosoftTeamFoundationServer2010\Tools运行:TFSServiceControlquiesce3.备份(或分离均可)TFS数据库…

  • Vue常用指令(二)

    Vue常用指令(二)6、v-for基于源数据多次渲染元素或模板块。图示:代码:<body><div id=”app”> <p v-for=”(score, index) in scores”> 索引: {{index }} , 分数: {{score}} </p> <div v-for=”(d, ke…

  • send()、sendto()和recv()、recvfrom()的使用

    send()、sendto()和recv()、recvfrom()的使用udp通讯中的sendto()需要在参数里指定接收方的地址/端口,recvfrom()则在参数中存放接收发送方的地址/端口,与之对应的send()和recv()则不需要如此,但是在调用send()之前,需要为套接字指定接收方的地址/端口(这样该函数才知道要把数据发往哪里),在调用recv()之前,可以为套接字指定发送方的地址/端口,这样该函数就只接收指定的发送方的数据,当然若不指定也可,该函数就可以

发表回复

您的电子邮箱地址不会被公开。

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