关于爬虫这块有个比较好奇的问题,想请教

2021-05-13 15:02:54 +08:00
 Colorful

每次爬虫之后,到数据库里面去,那假如说有重复的怎么解决? 是直接在写数据库方法的时候处理?

先用条件去判断这些数据有没有,有的话,更新?没有就插入?这样解决?

还是在页面显示的时候解决?用关键的字段去判断,然后去重,再显示最近的一条?

爬虫菜鸟一枚

3118 次点击
所在节点    Python
22 条回复
CainWang
2021-05-13 15:10:30 +08:00
可以把不想要重复的字段在数据库做个唯一索引。
或者把不想要重复的字段值拼接取一个 hash 放 redis 里,每次抓取入库前做 hash 校验过滤一遍
lithiumii
2021-05-13 15:15:16 +08:00
不想重复的字段唯一索引,写入时语句用 upsert ( mongodb )或者 INSERT ... ON DUPLICATE KEY UPDATE ( mysql ) 之类的
Colorful
2021-05-13 15:29:23 +08:00
@lithiumii 这个方法,我好好研究一下,太感谢了
Colorful
2021-05-13 15:29:55 +08:00
@CainWang redis 不熟,没怎么碰过
而且用的是阿里最便宜的服务器,估计用几次,就会爆掉吧
vacuitym
2021-05-13 16:11:29 +08:00
可以考虑布隆过滤
Colorful
2021-05-13 16:29:14 +08:00
@vacuitym 这个知识,感觉不在我的知识范围内,不过我得好好了解下。
imn1
2021-05-13 17:07:24 +08:00
url 一般可以做唯一标识( uniq key ),如果还要考虑时效,加个 datetime 基本够了
Colorful
2021-05-13 17:22:18 +08:00
@imn1 如果仅仅只做唯一标识的话,那同样的 URl 是添加不了?可是我想做更新处理
imn1
2021-05-13 17:44:45 +08:00
@Colorful #8
唯一标识不一定是主键,用几个字段合成一个 uniq index,对 insert/upsert 也是有效的
QuinceyWu
2021-05-13 17:48:56 +08:00
upset
Colorful
2021-05-13 17:54:37 +08:00
@imn1 我得好好了解下,感谢了
Aleph
2021-05-13 20:47:07 +08:00
数据库设置一个 MD5 字端,插入的时候 insert ingnore into...
johnsona
2021-05-13 20:50:40 +08:00
这都不会?不会吧不会吧方法多了去了 数据库 insert ignore 应用代码去重 至于你说的页面去重,我在下一页重复你不傻眼?
dorothyREN
2021-05-13 23:21:07 +08:00
唯一索引 然后忽略异常
no1xsyzy
2021-05-14 09:41:47 +08:00
这跟爬虫有什么关系?
这不是数据库的一般使用吗?
acmore
2021-05-14 09:48:00 +08:00
爬虫常用过滤方法是用布隆过滤器扫 URL
Codewj
2021-05-14 15:50:12 +08:00
https://onejane.github.io/2021/04/09/%E7%88%AC%E8%99%AB%E5%9F%BA%E7%A1%80%E7%AF%87%E4%B9%8BScrapy%E6%8A%93%E5%8F%96%E4%BA%AC%E4%B8%9C/#%E4%BF%9D%E5%AD%98%E5%88%86%E7%B1%BB%E6%95%B0%E6%8D%AE
scrapy_redis 现成的组件直接套用即可,配置几行代码就行了,本质就是使用 redis 对 url 生成的指纹通过中间件进行去重实现
Colorful
2021-05-14 17:20:11 +08:00
@no1xsyzy 那是我搞错了
evil0harry
2021-05-14 17:32:27 +08:00
布隆过滤器
aozhou
2021-05-14 18:23:48 +08:00
没到一定数量级不需要布隆过滤器吧,就按你说的第一种方案也可以,只是单纯设置索引的话,如果频率够高,到时候自增 id 会很大,也挺蛋疼,还有一堆“Duplicate”日志。
不到千万级别的数据量的话,就是唯一索引和你说的第一种办法,插入前查询来判断是否插入新数据。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/776723

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX