最近专门研究了下网页抓取,主要是研究对各种情况的抓取方法。今天张瑜 介绍下需要验证码的网页抓取。
现在有些网页为了防止被抓取,它要求用户先填入验证码后,才能使用其服务。那我们的蜘蛛的工作就遇到了极大的障碍;因为它不能识别验证码!当然有同学说用OCR去识别,然后填入。这是个方向,但是总有些验证码是机器无法识别的。那我们怎么办?
办法其实还是有,既然蜘蛛不能识别验证码;那我们就必须用人识别后告诉它。可行吗? 可行。众所周知,HTTP协议是无连接的协议,那么服务端判断客户端到底是否通过验证(成功输入验证码),一定是Browser传了点什么能代表自己身份的东西,比如cookie, 比如某个隐藏域的值等。既然如此,我们就可以人在网页上人工验证,然后把把与身份有关的信息找到(这个要具体情况具体分析,需要一些实验),最后把这些信息告诉蜘蛛;这样蜘蛛就可以继续冒名的去访问服务端,而服务端认为它已经通过验证,不需要再输入验证码了。
该方法的主要思路就是回归事物的本源,不管你用什么方式实现的web服务,其根本都是http协议。具体方法论就是上面所述,实践也通过了。主要是要花时间找到能代码Browser身份的信息。注意,有些web server它对User Agent有过滤,有些User Agent明显是机器的,它们可能不会得到跟你在浏览器中返回的同样的内容;故有时候User Agent也需要设置。
我使用java去做,会用到httpClient, 然后用Chrome去抓取http请求的信息。欢迎各位提出自己的见解。
----------------------------------------------------------------------
张瑜,Mybeautiful , zhangyu0182@sina.com
推荐阅读,