爬虫挑战。。求支援

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

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

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

第一次遇见这种,如果爬不了,多问一句,有没有这样子的开源库可以拿来做防爬虫。。
6704 次点击
所在节点    程序员
61 条回复
sohoer
2016-03-31 21:33:06 +08:00
CSS 与 PNG 图片是一一对应的,只能通过 CSS 位置再切字符图片做 OCR 处理
这个 OCR 已经很简单了,转成位图多少个字符做多少个模板,(还可以使用相似度匹配算法,基本上 100%正确)
对字符做 OCR 后可以得到一张 CLASS 对应字符的表
Rubbly
2016-03-31 21:39:33 +08:00
20L 方法亲测有效...
yixiang
2016-03-31 22:05:04 +08:00
用 20L 方法,产品成立日期和起购金额之类数据是显示不出来的。

这部分是直接服务器传过来 css 和 html ,转换成图片之前的原始数据应该一开始就不在客户端。

不管怎样都要处理图片。
WildCat
2016-03-31 22:08:09 +08:00
OCR 感觉清晰度可以,训练下模型应该可以用( wan )
sjlee
2016-03-31 22:14:22 +08:00
这种黑白数字 OCR 是最简单的。以前我用 tesseract 试过,可行。
icedx
2016-03-31 22:42:10 +08:00
写着写着就厌倦了
https://file.io/z6QI7F
先用 binarization_spec()二值化图片
再用 cut_images(图片文件,css_parse_spec(对应 CSS)) 切图
然后 compare_picture(load_image(切好的小图))
sunchen
2016-03-31 23:15:32 +08:00
pHash 可以试试能不能简化图片识别
gkiwi
2016-03-31 23:54:13 +08:00
@domty 不想当人肉。。
gkiwi
2016-03-31 23:56:42 +08:00
@feather12315
@sohoer
@WildCat
@sjlee
@icedx
@sunchen

ocr 效果不好,不太懂图片预处理的事情,大家有思路么?

@icedx 链接挂了~
gkiwi
2016-03-31 23:59:41 +08:00
@pimin 这个思路棒,不过在我的场景下不适合,数据库索引就跪了。。
hiboshi
2016-04-01 00:10:42 +08:00
@pimin 将图片部分之间切成图片是可行,但是 很多时候 爬出来的数据时要做 查询的。
hiboshi
2016-04-01 00:13:46 +08:00
楼组

我觉得 可以 找出 css 里面的规律 然后 对应起来
http://b1r.cn/dicss/584vX.css
sjlee
2016-04-01 00:43:00 +08:00
@gkiwi

那些图片的数据貌似在渲染后网页上有固定位置,或者你可以把要爬的网页截屏,再把想要的数据抠出来,然后 OCR 就简单了。
ysmood
2016-04-01 00:55:35 +08:00
我直接 curl 就获取到内容了啊?不需要特殊处理就能拿到全部数据。它用图片混淆是为了防止人用鼠标复制内容的,不是为了防搜索引擎或爬虫的,这站点 seo 做的挺好的。

就是你想太多了吧?
icedx
2016-04-01 00:57:11 +08:00
@gkiwi 楼主 QQ 多少
icedx
2016-04-01 01:05:53 +08:00
icedx
2016-04-01 01:17:27 +08:00
用 phantomjs 或者 QWebkit 渲染页面

然后能拿到一个 css 地址
可以推导出含有字符图片的地址
先用 binarization_spec()二值化字符图片
再用 cut_images(二值化后的字符图片文件,css_parse_spec(对应 css)) 进行切图
然后用 load_image(切好的小图)) 得到一个 list
然后 compare_picture() 进行对比 得到一个 list
根据 list 包含的文件名 就能知道相应的 css ID 对应的是什么数字
gkiwi
2016-04-01 02:05:16 +08:00
@icedx

Q: base64.b64decode('MTUwNjA0MTAwMA==')

谢谢!看了你的代码,差异的地方在于 图片识别的我用的是 tesseract (效果不如预期),看你的是利用 ximage_str 直接计算图片二值化后的相似度,这个应该会好很多,毕竟取_max 至少是不会出现 tesseract 中识别不出啥的情况。明早起来我试试看!
gkiwi
2016-04-01 02:06:48 +08:00
@ysmood 仔细瞅瞅数据,可以看到 curl 拿到的,部分数字是没有的,文字都是存在的。他图片化的只有标点和数字。这样子对 SEO 和网站自适应都有好处
RangerWolf
2016-04-01 09:16:40 +08:00
楼主,如果提供识别率>90%的解析 API ,你愿意付费吗?

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

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

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

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

© 2021 V2EX