爬虫, mysql 唯一索引 重复数据 ID 会自增。请问怎么解决?

2018-12-26 14:52:26 +08:00
 mon3
看了一下 scrapy 没这问题。
5063 次点击
所在节点    Python
41 条回复
holajamc
2018-12-26 14:59:25 +08:00
虽然我不懂你说了什么,但是 INSERT 数据难道 ID 不应该自增?
bestie
2018-12-26 15:03:51 +08:00
不懂你说了什么,插了数据当然会自增,不知道你是怎么判断重复的,重复的跳过就是了
Vegetable
2018-12-26 15:28:57 +08:00
我猜是说,判断重复的数据后并灭有插入,但是 ID 却消耗掉了.可能和 on duplicate key update 的问题类似吧.
xkeyideal
2018-12-26 15:37:41 +08:00
难道爬虫都不过滤重复数据了么,布隆过滤器了解一下
mon3
2018-12-26 15:41:59 +08:00
@xkeyideal 过滤不了,也没用。只能在数据库上设置唯一索引。
gouchaoer2
2018-12-26 15:43:13 +08:00
用框架就意味着你失去灵活性,就这么简单的任务都无法搞定,所以少用框架
lihongjie0209
2018-12-26 15:43:49 +08:00
@mon3 你数据能设置唯一索引, 你代码过滤不了? 数据库不是代码??
loveCoding
2018-12-26 15:52:09 +08:00
这是业务问题,跟框架没什么关系
Mac
2018-12-26 15:55:39 +08:00
你该去好好看看 INSERT 语句 ON DUPLICATE 时的用法了。
EvilCult
2018-12-26 15:58:11 +08:00
同意 3 楼....
是不是写入的时候用的是“ replace into ”
而不是 “ on duplicate key update ”
xpresslink
2018-12-26 16:21:11 +08:00
以前用过 scrapy+django+djangoitem 爬到内容直接用 django ORM 入库,每条信息都会有一个唯一索引用识别,
再爬的时候 Foo.objects.get_or_create(defaults__exact='bar', defaults={'defaults': 'baz'})
glacer
2018-12-26 16:35:23 +08:00
@EvilCult on duplicate key update 也会导致原 id 变化的
aborigine
2018-12-26 16:40:04 +08:00
@EvilCult #10 无论 replace into 还是 on duplicate key 都会导致 id+1
xpresslink
2018-12-26 16:45:21 +08:00
@xpresslink #11,写错了应该是用 .objects.update_or_create,没有就新建,有就更新。
mon3
2018-12-26 16:50:55 +08:00
@Mac ON DUPLICATE ID 一样会自增。
mon3
2018-12-26 16:52:42 +08:00
@xpresslink 表的数据有的不能更新的,所以这个办法不太适合我。。
xpresslink
2018-12-26 16:57:23 +08:00
@mon3
字段唯一索引,新增数据重复了,然后 你的处理逻辑是什么?直接丢弃 /新建一个 /更新?
请说出你的故事。
mon3
2018-12-26 17:02:25 +08:00
@xpresslink 有重复数据的话直接丢弃,这步 mysql 自动执行了,但是 ID 也会增长,我需要的是 ID 不增长,数据直接丢。
holajamc
2018-12-26 17:03:22 +08:00
@mon3 既然这样的需求,为什么不考虑用布隆过滤器进行过滤呢…
mon3
2018-12-26 17:09:33 +08:00
@holajamc 主要数据太多上亿,采集无法 24 小时开。

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

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

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

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

© 2021 V2EX