爬虫挑战。。求支援

2016-03-31 19:07:06 +08:00
 gkiwi
栗子:
http://www.yinhang.com/licaichanpin_gRrgLT98.html

以前一直觉得爬虫的难度可能在 ip ,频次,模拟鼠标操作等等,从来不觉得解析 html 是问题,但是这次是真给跪了。

网页上的 数字和标点 都是图片生成的,而且每次请求图片都不一样。

第一次遇见这种,如果爬不了,多问一句,有没有这样子的开源库可以拿来做防爬虫。。
6452 次点击
所在节点    程序员
61 条回复
feather12315
2016-03-31 19:16:55 +08:00
开源 OCR ?
gkiwi
2016-03-31 19:19:35 +08:00
@feather12315 这个就远了。有想过用机器学习来做,成本太高。
magicdawn
2016-03-31 19:28:21 +08:00
magicdawn
2016-03-31 19:28:58 +08:00
手动写下这些 class 与 数字的关系。。。哎
armstrong
2016-03-31 19:29:24 +08:00
赞楼主的好心态,围观后续的解决方案
magicdawn
2016-03-31 19:30:10 +08:00
还有图片不一样。。。也是醉了
gkiwi
2016-03-31 19:37:20 +08:00
@magicdawn 你刷新下看看, class 也是不一样的。。。
domty
2016-03-31 19:41:01 +08:00
他后端应该有详细的数字标点转图片的解决方案。
通过字符集模板图片+css 浮动来控制显示的字符。
iannil
2016-03-31 19:47:16 +08:00
连着标点位置 css 、标点 png 和 html 一起拿下来,存好对应关系,在 html 里抓出目标文本,在有标点的地方做好标记。

纯数字+标点的图,但做 OCR 的话,正确率很高的。也可以做另一个服务进行二次处理,每 4-6 个字符扔给验证码识别服务里去做识别。正确率也很高。
gkiwi
2016-03-31 19:49:28 +08:00
@iannil
嗯,有这个思路。已经下载 tesseract 准备尝试了,看看效果吧:)
magicdawn
2016-03-31 19:54:00 +08:00
可变这个我找到了这个,是一个 jsonp 请求,数据都在这个里面

curl 'http://code.bankrate.com.cn/getProductData/financing_gRrgLT98?pos=detail' -H 'DNT: 1' -H 'Accept-Encoding: gzip, deflate, sdch' -H 'Accept-Language: zh-CN,zh;q=0 .8,en-US;q=0.6,en;q=0.4,zh-TW;q=0.2' -H 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36' -H 'Ac cept: */*' -H 'Referer: http://www.yinhang.com/licaichanpin_gRrgLT98.html' -H 'Cookie: yinhangphp=3d875ac5e500d51a632d4959018a0ed9; uuid=NDc0ODQxMjg0|1459423300|c0639c96 ddb05e0ff90a9e021cbea2d93f6917f5; origin_referer="http%3A//v2ex.com/t/267702"' -H 'Connection: keep-alive' -H 'Cache-Control: max-age=0' --compressed

里面包含了 css 地址, css 地址跟 bg 地址部分相同
magicdawn
2016-03-31 19:56:36 +08:00
拿 css 的背景图片 + class 的 background-position 去切割图片,然后拿去 ocr 识别。好复杂的说。
xujunfu
2016-03-31 20:00:09 +08:00
有 splinter 啊
domty
2016-03-31 20:06:14 +08:00
它的 css 和字符集模板图片是同名的,也就是说当我需要以图片的形式显示一个文字或标点符号的时候,我只要随机从几个样式中选出一个就可以了。也就是说同一份 css 文件下,一个 css class 就代表一个字符。

它给出的图片是静态资源,也就是说这样一份随机生成的样本数量应该是有限的。文件名是 584**,样本数量应该也就是( 26+26+10)的平方个样本。

可不可以人肉破解几个拿到已知的数字或符号,在抓取足够的符号样本,然后去其他页面进行穷举。
YUX
2016-03-31 20:08:50 +08:00
给我三个小时 我看看能不能帮上点忙
pimin
2016-03-31 20:30:07 +08:00
@ 3dwelcome
让算法大师给你解一下

这个确实挺有意思的

我觉得爬虫嘛,未必要真爬成文字
他图片你就解析图片成 HTML 存好了
根据他的图片和位置关系,把图片切出来.

反推的难度我感觉有点大.
alexapollo
2016-03-31 20:34:08 +08:00
mark.
klmun
2016-03-31 20:45:01 +08:00
mark
看起来挺麻烦的
aaronrzh
2016-03-31 21:00:45 +08:00
OCR 可能是最简单的方法了,图片和 css 可以随机生成的
http://code.bankrate.com.cn/getProductData/financing_gRrgLT98?pos=detail
这是获取数据的接口,除非能直接看见接口代码,不然就是瞎猜了
aabbccli
2016-03-31 21:20:43 +08:00
试了下,浏览器禁止 JS 以后,显示正常文本

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

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

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

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

© 2021 V2EX