为防采集,如何将 URL 中的自增数字 id 换成无规律字符串?

2018-12-17 08:46:03 +08:00
 alwayshere

很多 URL,比如 SO,都是这种形式: https://stackoverflow.com/questions/53798427/type-mismatch-dependent-mealy-machine ,其中的 53798427 也许就是数据库中的自增 id 主键(不管 SO 是不是,至少我目前是这么干的),直接查询 URL 中的 id,对应数据库中的自增主键 id,查询效率最高。但这样的话,采集者都不用爬列表页了,直接自增 id,一个 while 循环就可以把所有内容也爬完了,所以可不可以生成一个无规律字符串,该字符串 int 或者 char 类型都可以,可以逆向生成数据库主键 id,再在数据库中查询该 id,如何用 php 最简单的实现?

12359 次点击
所在节点    程序员
92 条回复
xiaogui
2018-12-17 10:21:38 +08:00
hashid + 1
ju5t4fun
2018-12-17 10:25:28 +08:00
数据库随机插入一些无效的 ID,只要访问这些 ID,直接封 IP
lockiee
2018-12-17 10:27:21 +08:00
@ylsc633 我之前的 hashid 是根据主键。。所以先生成记录再更新了。。
cdwyd
2018-12-17 10:29:00 +08:00
@ylsc633 我都是动态的生成和验证并不入库
cdwyd
2018-12-17 10:30:16 +08:00
@lockiee 这个不做存储也没关系啊,浪费点 cpu 进行解码编码而已
soulmine
2018-12-17 10:32:07 +08:00
@ju5t4fun 现在爬虫谁手上还没个代理池?你这没用啊 而且万一真实用户误碰到了呢 直接封你是嫌用户太多?
zbn
2018-12-17 10:33:20 +08:00
用 UUID 呀,oracle 数据库差不多都用的是 uuid
soulmine
2018-12-17 10:33:58 +08:00
搞过三年爬虫的来说说 你这完全没必要 你就算把 URL 搞出花出来 你总不能不让普通人看吧 我只要模仿普通人就行了 啥问题都可以解决 你能做的无非就是不要让人爬的过快而已 反爬是个很深的东西 不是改点 URL 就可以的
liuxey
2018-12-17 10:38:44 +08:00
对 id 做 hash 后并没有对爬虫增加什么压力,多一次 list 而已
但如果你的 id 会暴露公司业务,那么可以做一次 hash
tofishes
2018-12-17 10:40:17 +08:00
如果爬虫真按照你的 id 递增来抓取信息,你反而可以轻易设定反爬虫规则,试问,正常人会在特定时间段依次按 id 访问你的网站吗?若爬虫没按照 id 递增的方式,那你这问题就不是个问题。
cdwyd
2018-12-17 10:44:44 +08:00
@soulmine 并不是,混淆了 id 然后列表只显示最新的部分,你就很难抓了,就算抓了心里也会嘀咕到底抓全了没有。反爬不用想的那么多
redh
2018-12-17 10:45:27 +08:00
#16 10 进制 转多进制的形式是个很好的思路,之前在云栖社也读过一篇这样的文章,建议楼主尝试下。
tearslee
2018-12-17 10:46:19 +08:00
@beiyu 蒙多没装备之前 哪儿都去不了
soulmine
2018-12-17 10:48:35 +08:00
@cdwyd 很简单 不是最新的你提供给普通用户看么 你只要提供我就能抓到 还有犯啥嘀咕 我把我能看到的所有东西抓完就 ok 普通用户能看到多少我就抓多少
locoz
2018-12-17 10:53:18 +08:00
twitter 有个叫 SnowFlake 的自增无序唯一 ID 算法,可以了解一下。不过你做这个其实只能隐藏自己的业务量,并不能防止爬虫去爬你的数据,毕竟只要是普通用户能在列表页看到的爬虫就能爬到,而用户看不到的那些其实价值也不会太高。
cdwyd
2018-12-17 10:54:04 +08:00
@soulmine 这样你最多也就只能抓取到从你开始抓那天开始发布的新内容。
strict
2018-12-17 10:57:10 +08:00
其实重点就是找一个可逆的加密算法就可以了。
我一般使用
from itsdangerous import URLSafeSerializer
s = URLSafeSerializer('secret-key')
sig_okay, payload = s.loads_unsafe(data)
soulmine
2018-12-17 11:06:39 +08:00
@cdwyd 我不是都说了么 你之前的内容不展示了?删除了?那就不是我爬虫的问题了啊 普通人也看不到啊
chengxiao
2018-12-17 11:07:15 +08:00
只要你有 url 链接到 就能采集到......说实话 平时用自增字段采集 还真不常见
xpresslink
2018-12-17 11:24:38 +08:00
通常的做法是在数据表再加一个 Unique 列,插入的时候生成一个 uuid,在页面上和 url 都用 uuid 来调用。
但是这对于反爬来说没有什么卵用,爬虫最基本的入门技术水平就是会翻页取 url 列表。
不用数字 id 而用 uuid 的目的主要是为了不让用户猜到数据增量仅此而已。

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

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

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

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

© 2021 V2EX