1
manoon 2013-07-06 00:11:08 +08:00
人工打码。。。
|
2
manoon 2013-07-06 00:12:23 +08:00 1
|
3
armoni 2013-07-06 00:55:23 +08:00 1
http://code.google.com/p/tesseract-ocr/ 英文和数字识别率还行,python库比较成熟
|
4
daoluan OP |
6
denger 2013-07-06 22:37:38 +08:00 via iPad 1
|
8
nsxuan 2013-07-06 22:59:29 +08:00 via Android
地址发来
|
9
daoluan OP |
10
daoluan OP |
11
flowerfly 2013-07-07 06:04:12 +08:00
可参考这一篇
|
12
flowerfly 2013-07-07 06:04:18 +08:00
|
14
daoluan OP @denger http://jwc.scnu.edu.cn/ 这里有图片,谢谢。
|
15
daoluan OP @denger http://jwc.scnu.edu.cn/ 这里有图片,能不能提供一点思路?这种验证码算是简单的吧?
|
16
denger 2013-07-12 18:26:52 +08:00
@flowerfly 这个文章写的挺不错, 很具参考意义.
@daoluan 嗯,看上去不难. 如果是我弄的话我会分为下面主要的几步: 1. 去噪点. 从码图上看字的颜色基本不随机固定色值范围(淺蓝->深蓝), 根据这个规则即可删掉那些随机颜色的噪点. 再根据处理后的效果可考虑是否进行再次处理, 比如将独立的相素点删除(上下左右无相邻的相素点). 2. 分割. 算是这个码的重难点了. 对于字符之间有粘连的情况如果对识别要求不是特别高(>80%)的话建议忽略该码.其它只有字符间有缝隙的码基本上都能通过扫描线法(自行Google)来搞定. 3. 分割之后就是为分割之后的字符建立字库了. 起先可人工建立一下字库, 后期使用程序识别+人工纠错的方式建立字库,具体算法为Levenshtein Distance, 参见我的post: http://denger.me/2013/03/hack-sina-weibo-verify-code/ |
17
daoluan OP |
18
daoluan OP @denger 嗯,Levenshtein Distance 算法就是计算两个字符串的相似度,我看了你的文章后来提到的识别效率问题,无法突破微信的「5 秒」的限制,是个问题。
|
19
zhwei 2013-07-12 20:55:46 +08:00
|
20
okidogi 2013-07-12 22:12:55 +08:00
# 登录获取cookie,只需要一次获取。
wget --save-cookies cookies.txt \ --post-data 'user=username&password=password' \ http://www.xxx.com # 然后加载cookie 就可以随意访问抓取了。。。 wget --load-cookies cookies.txt \ -p http://www.xxx.com/article/xxx 飘过 |
21
Bviews 2013-07-12 22:20:00 +08:00
让用户输入验证码吧。要不然如果验证码比较复杂你的样本库数量大的话,5秒内还要完成抓取解析如果不考虑网络延时的话,可能时间差不多。
|
23
daoluan OP @zhwei 嗯,我已经尝试过了,因为我的 python 服务器是部署在 sae 上,但 sae 不允许写文件,http://sae.sina.com.cn/?m=devcenter&catId=206 PHP 和 java 可以使用 sae 的 TMPFS,但 python 没有这个待遇。
到底怎么破! |
24
daoluan OP |
25
ccdjh 2013-07-13 13:10:37 +08:00 via Android
采集同学的数据,自己建立数据库,第一次握手时,先回复一条确认,第二条再回复数据,这样就10秒啦!
|
26
okidogi 2013-07-13 17:56:35 +08:00
@daoluan 是啊,点了回复之后就发现看错题了。囧。
chrome有个插件,可以将cookie导出成wget可以使用的格式。可以手动输入验证码,然后保存cookie,然后wget。 https://chrome.google.com/webstore/detail/cookietxt-export/lopabhfecdfhgogdbojmaicoicjekelh?hl=en |
27
zhwei 2013-07-14 10:08:35 +08:00
@daoluan 我直接保存了用于登陆的对象, 第一次请求的时候调用`pre_login`方法, 返回验证码和请求识别码(eg. md5(datetime) 用户辨认是哪一个请求), 并且将整个对象保存到一个字典中,key为请求识别码, 用户输入验证码后,调用`login`方法, 从字典中`pop`出相应的对象, 模拟登陆.
登陆流程 https://github.com/zhwei/gotit/blob/gunicorn/code.py#L82-L106 保存的对象 https://github.com/zhwei/gotit/blob/gunicorn/addons/zf.py |