
span class="no">1 feather12315 Mar 31, 2016 via Android 开源 OCR ? |
2 gkiwi OP @feather12315 这个就远了。有想过用机器学习来做,成本太高。 |
3 magicdawn Mar 31, 2016 |
4 magicdawn Mar 31, 2016 手动写下这些 class 与 数字的关系。。。哎 |
5 armstrong Mar 31, 2016 赞楼主的好心态,围观后续的解决方案 |
6 magicdawn Mar 31, 2016 还有图片不一样。。。也是醉了 |
8 domty Mar 31, 2016 他后端应该有详细的数字标点转图片的解决方案。 通过字符集模板图片+css 浮动来控制显示的字符。 |
9 iannil Mar 31, 2016 连着标点位置 css 、标点 png 和 html 一起拿下来,存好对应关系,在 html 里抓出目标文本,在有标点的地方做好标记。 纯数字+标点的图,但做 OCR 的话,正确率很高的。也可以做另一个服务进行二次处理,每 4-6 个字符扔给验证码识别服务里去做识别。正确率也很高。 |
11 magicdawn Mar 31, 2016 可变这个我找到了这个,是一个 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 地址部分相同 |
12 magicdawn Mar 31, 2016 拿 css 的背景图片 + class 的 background-position 去切割图片,然后拿去 ocr 识别。好复杂的说。 |
13 xujunfu Mar 31, 2016 有 splinter 啊 |
14 domty Mar 31, 2016 它的 css 和字符集模板图片是同名的,也就是说当我需要以图片的形式显示一个文字或标点符号的时候,我只要随机从几个样式中选出一个就可以了。也就是说同一份 css 文件下,一个 css class 就代表一个字符。 它给出的图片是静态资源,也就是说这样一份随机生成的样本数量应该是有限的。文件名是 584**,样本数量应该也就是( 26+26+10)的平方个样本。 可不可以人肉破解几个拿到已知的数字或符号,在抓取足够的符号样本,然后去其他页面进行穷举。 |
15 YUX PRO 给我三个小时 我看看能不能帮上点忙 |
16 pimin Mar 31, 2016 @ 3dwelcome 让算法大师给你解一下 这个确实挺有意思的 我觉得爬虫嘛,未必要真爬成文字 他图片你就解析图片成 HTML 存好了 根据他的图片和位置关系,把图片切出来. 反推的难度我感觉有点大. |
17 alexapollo Mar 31, 2016 mark. |
18 klmun Mar 31, 2016 mark 看起来挺麻烦的 |
19 aaronrzh Mar 31, 2016 OCR 可能是最简单的方法了,图片和 css 可以随机生成的 http://code.bankrate.com.cn/getProductData/financing_gRrgLT98?pos=detail 这是获取数据的接口,除非能直接看见接口代码,不然就是瞎猜了 |
20 aabbccli Mar 31, 2016 试了下,浏览器禁止 JS 以后,显示正常文本 |
21 sohoer Mar 31, 2016 CSS 与 PNG 图片是一一对应的,只能通过 CSS 位置再切字符图片做 OCR 处理 这个 OCR 已经很简单了,转成位图多少个字符做多少个模板,(还可以使用相似度匹配算法,基本上 100%正确) 对字符做 OCR 后可以得到一张 CLASS 对应字符的表 |
22 Rubbly Mar 31, 2016 20L 方法亲测有效... |
23 yixiang Mar 31, 2016 用 20L 方法,产品成立日期和起购金额之类数据是显示不出来的。 这部分是直接服务器传过来 css 和 html ,转换成图片之前的原始数据应该一开始就不在客户端。 不管怎样都要处理图片。 |
24 WildCat Mar 31, 2016 OCR 感觉清晰度可以,训练下模型应该可以用( wan ) |
25 sjlee Mar 31, 2016 这种黑白数字 OCR 是最简单的。以前我用 tesseract 试过,可行。 |
26 icedx Mar 31, 2016 写着写着就厌倦了 https://file.io/z6QI7F 先用 binarization_spec()二值化图片 再用 cut_images(图片文件,css_parse_spec(对应 CSS)) 切图 然后 compare_picture(load_image(切好的小图)) |
27 sunchen Mar 31, 2016 pHash 可以试试能不能简化图片识别 |
29 gkiwi OP |
32 hiboshi Apr 1, 2016 |
34 ysmood Apr 1, 2016 我直接 curl 就获取到内容了啊?不需要特殊处理就能拿到全部数据。它用图片混淆是为了防止人用鼠标复制内容的,不是为了防搜索引擎或爬虫的,这站点 seo 做的挺好的。 就是你想太多了吧? |
36 icedx Apr 1, 2016 via Android |
37 icedx Apr 1, 2016 via Android 用 phantomjs 或者 QWebkit 渲染页面 然后能拿到一个 css 地址 可以推导出含有字符图片的地址 先用 binarization_spec()二值化字符图片 再用 cut_images(二值化后的字符图片文件,css_parse_spec(对应 css)) 进行切图 然后用 load_image(切好的小图)) 得到一个 list 然后 compare_picture() 进行对比 得到一个 list 根据 list 包含的文件名 就能知道相应的 css ID 对应的是什么数字 |
38 gkiwi OP @icedx Q: base64.b64decode('MTUwNjA0MTAwMA==') 谢谢!看了你的代码,差异的地方在于 图片识别的我用的是 tesseract (效果不如预期),看你的是利用 ximage_str 直接计算图片二值化后的相似度,这个应该会好很多,毕竟取_max 至少是不会出现 tesseract 中识别不出啥的情况。明早起来我试试看! |
39 gkiwi OP @ysmood 仔细瞅瞅数据,可以看到 curl 拿到的,部分数字是没有的,文字都是存在的。他图片化的只有标点和数字。这样子对 SEO 和网站自适应都有好处 |
40 RangerWolf Apr 1, 2016 楼主,如果提供识别率>90%的解析 API ,你愿意付费吗? |
41 alexinit Apr 1, 2016 mark |
42 zhoutianmao Apr 1, 2016 mark 一下吧。刚开始做爬虫。 |
43 icedx Apr 1, 2016 本站监测到来自您这个 IP 地址不友好的访问行为。暂时对来自这个 IP 的访问请求进行了限制。如您对银率网的数据有合作意向,请提交如下申请,本站将据此决定是否解除限制或商谈合作方式: 只好写个本地的了 https://drive.google.com/file/d/0B3Y1POZM1XkEeTh6bFlXbDVIWkU/view 把图片和对应的 css 放到 test 目录里 然后调用 learn.py 里的函数 test('test'+os.sep+'584Gh.css','test'+os.sep+'584Gh.png') 第一个填 css 路径 第二个填图片路径 识别率应该是 90% |
44 icedx Apr 1, 2016 已提交 pr |
45 leavic Apr 1, 2016 我试了一下 scrapy shell ,直接 view content 完全和网站一样啊。 20L 说的禁用 js ,我觉得这都是写爬虫的基本第一步了吧,肯定不能让爬虫取解析 js 。 说白了,我真不知道楼主碰到了什么问题。 |
46 leavic Apr 1, 2016 好吧,原来是几个基金信息那里有猫腻,研究一下。 |
47 herozzm Apr 1, 2016 我看到和 20L , 34L 的一样,源代码中都是可以直接看到所有数字和图片,只是用 js 替换了一下,防止复制而已 |
49 herozzm Apr 1, 2016 我忽略了部分数据, js 只是替换部分,头部表格内的数据依然是图片 |
50 herozzm Apr 1, 2016 他的背景图片都做了干扰,但干扰的不太厉害,这和破解验证码一个道理了 |
51 shenghe Apr 1, 2016 搞这玩意,浪费时间和金钱嘛,这里不是有一样的数据吗? http://xueqiu.com/S/FP7233387300 |
52 jswh Apr 1, 2016 如果愿意花钱的话,可以参考人工打码解决方案,我觉得是最快的。 |
53 rale Apr 1, 2016 期待楼主新的解决方案,看了帖子,有了很多思路,同时,假如返回的是矢量图片,那效果怎么样? |
55 sunwei0325 Apr 2, 2016 美团也是这样的, 金额都是数字图片, 太恶心了 |
56 zvDC Apr 2, 2016 学习很多思路 |
57 gkiwi OP 我测试了 @icedx 给的代码,裸眼了几个结果,感觉都 ok ,其实主要是数字没问题就好了。谢!!! @rale 可以考虑把矢量图转换为位图再处理。。不过不清楚矢量图文件格式是否有更简洁的途径。 @RangerWolf 只是临时性质的任务,已经搞定。如果是大任务量的爬虫,可以联系合作:) @shenghe 算是个挑战吧。在其他网站确实都找到了数据,但是这个坑还得填啊! |
58 icedx Apr 4, 2016 我已经发了 PR 到 https://github.com/bugkiwi/ocr_yinhang 合并下在 Github 上展示吧~ |
59 RangerWolf Apr 4, 2016 @gkiwi 恭喜楼主搞定! 其实我这边主要也是最近有类似的识别数字的任务,并且用的是机器学习的那一套(我只负责调用 lib 接口 呵呵) 并且准确率可能要 95%以上,想着你说不定正好需要 哈哈 |
60 gkiwi OP |
61 RangerWolf Apr 5, 2016 @gkiwi 其实是类似这个东西: https://www.kaggle.com/c/digit-recognizer |