需要爬取一个网站内容,需登录和验证码(简单字母数字),怎么破?

2013-07-05 23:50:38 +08:00
 daoluan
学校教务系统的网站,最近添加了验证码,不知如何爬取了。

一个方案:收集验证码图片,降噪处理什么的,标记对应的验证码,生成一个验证码数据集。在需要输入验证码的时候,用图片与数据集中的验证码数据集比较~

「一个方案」可行么?
9565 次点击
所在节点    问与答
29 条回复
Bviews
2013-07-12 22:20:00 +08:00
让用户输入验证码吧。要不然如果验证码比较复杂你的样本库数量大的话,5秒内还要完成抓取解析如果不考虑网络延时的话,可能时间差不多。
daoluan
2013-07-13 08:27:55 +08:00
@okidogi 呃。。真不认镇看题,有验证码在那里,cookie 不能直接使用。
daoluan
2013-07-13 08:30:37 +08:00
@zhwei 嗯,我已经尝试过了,因为我的 python 服务器是部署在 sae 上,但 sae 不允许写文件,http://sae.sina.com.cn/?m=devcenter&catId=206 PHP 和 java 可以使用 sae 的 TMPFS,但 python 没有这个待遇。

到底怎么破!
daoluan
2013-07-13 09:14:23 +08:00
@zhwei
@Bviews

正在考虑用户输入验证码,突破的关键还是前一条回复所说的。请求验证码图片的时候要放入 cookie,不然获取的验证码是没什么用的。
ccdjh
2013-07-13 13:10:37 +08:00
采集同学的数据,自己建立数据库,第一次握手时,先回复一条确认,第二条再回复数据,这样就10秒啦!
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
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
daoluan
2013-07-17 23:52:53 +08:00
@zhwei 你确定这能用在微信公众平台上?
zhwei
2013-07-18 00:15:17 +08:00
@daoluan 需要你自己改一下, 没有做过微信公众平台

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

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

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

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

© 2021 V2EX