每次爬虫之后,到数据库里面去,那假如说有重复的怎么解决? 是直接在写数据库方法的时候处理?
先用条件去判断这些数据有没有,有的话,更新?没有就插入?这样解决?
还是在页面显示的时候解决?用关键的字段去判断,然后去重,再显示最近的一条?
爬虫菜鸟一枚
1
CainWang 2021-05-13 15:10:30 +08:00
可以把不想要重复的字段在数据库做个唯一索引。
或者把不想要重复的字段值拼接取一个 hash 放 redis 里,每次抓取入库前做 hash 校验过滤一遍 |
2
lithiumii 2021-05-13 15:15:16 +08:00
不想重复的字段唯一索引,写入时语句用 upsert ( mongodb )或者 INSERT ... ON DUPLICATE KEY UPDATE ( mysql ) 之类的
|
5
vacuitym 2021-05-13 16:11:29 +08:00
可以考虑布隆过滤
|
7
imn1 2021-05-13 17:07:24 +08:00
url 一般可以做唯一标识( uniq key ),如果还要考虑时效,加个 datetime 基本够了
|
10
QuinceyWu 2021-05-13 17:48:56 +08:00
upset
|
12
Aleph 2021-05-13 20:47:07 +08:00
数据库设置一个 MD5 字端,插入的时候 insert ingnore into...
|
13
johnsona 2021-05-13 20:50:40 +08:00 via iPhone
这都不会?不会吧不会吧方法多了去了 数据库 insert ignore 应用代码去重 至于你说的页面去重,我在下一页重复你不傻眼?
|
14
dorothyREN 2021-05-13 23:21:07 +08:00
唯一索引 然后忽略异常
|
15
no1xsyzy 2021-05-14 09:41:47 +08:00
这跟爬虫有什么关系?
这不是数据库的一般使用吗? |
16
acmore 2021-05-14 09:48:00 +08:00
爬虫常用过滤方法是用布隆过滤器扫 URL
|
17
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 生成的指纹通过中间件进行去重实现 |
19
evil0harry 2021-05-14 17:32:27 +08:00
布隆过滤器
|
20
aozhou 2021-05-14 18:23:48 +08:00
没到一定数量级不需要布隆过滤器吧,就按你说的第一种方案也可以,只是单纯设置索引的话,如果频率够高,到时候自增 id 会很大,也挺蛋疼,还有一堆“Duplicate”日志。
不到千万级别的数据量的话,就是唯一索引和你说的第一种办法,插入前查询来判断是否插入新数据。 |
21
llsquaer 2021-05-21 10:25:54 +08:00
量不是很大..直接用 数据库的 insert ignore into table_name(xxxx) .....前提是,字段需要是第一主键
|