Python带验证码网络爬虫入门

【0】 写在前面

这篇文章写给那些有编程经验无网络经验,有python经验无爬虫经验,有网络经验无验证码识别经验的人,也算是自己从零到有,从完全小白开始奋战刷课机(一个带验证码识别的自动选课程序,学校的抢课太凶残了)两天两夜的经验总结,想做一个非常详细的教程,希望读者看完后,刷课机也基本写完了,省下时间可以多看一些其他书。

本文线索:【1】环境设置;【2】网络部分;【3】验证码识别部分。

 

【1】 环境配置

不推荐Windows系统,因为很多第三方的库只考虑了Linux环境下的编译,比如py文件里的路径是用 ‘/’ 但Windows环境下的路径是 ‘\\’,这就非常坑爸爸了,还有诸如新系统装了VS2013,但是很多源代码编译的时候要用VS2008或MinGW,安装就很繁琐了。

推荐Linux系列的系统,双系统虚拟机萝卜青菜各有所爱~

python版本分为2.X系和3.X系,因为我使用的第三方库有PIL和svmlight,PIL全称是Python Image Library,目前官方只支持2.X,于是我推荐大家使用2.X系列的。

# 安装pip,一个python环境必备的软件,帮助python安装管理第三方插件,python-dev是安装其他软件首先要具备的,否则可能编译安装的时候会出现缺少Python.h文件等奇怪问题。

# 安装PIL,一开始安装的库是为了支持jpeg,png等格式的图片,有时候PIL安装出现问题,要用pillow,具体作用不太清楚。

# 安装svmlight,python有各种各样的数学库,甚至可以用OpenCV的库来做验证码识别(个人非常喜欢OpenCV),因为我们目标明确,这里推荐一个轻量级svm库,它貌似只有四个函数可以调用,训练model,保存model,读取model,用model做预测识别,非常轻量级非常方便。

至此环境全部配置完了,可以测试一下:

如果没有报错什么的,恭喜你,安装成功了:),这些软件都比较成熟了,如果有奇怪的问题,复制到google中也比较容易解决~

如果有python的小白不懂python的语法的话,建议去w3cschool花几个小时自学一下,很容易的。

补充一下个人习惯的程序头部:

 

【2】 网络部分

# 网络使用urllib和urllib2的库,服务器要保证发给浏览器的验证码图片和用户输入的验证码一一对应,会用到cookie这个东西,在程序的一开始为程序“安装”cookie:

# 打开一个网址,并下载相应html文件或图片到本地:

# 这时候,你的cookiie_jar已经有相应网站的cookie了,可以提取后输出到屏幕上:

# 假设网页中还提供了一个和验证码一一对应的token数值,我们要把它提取出来,到时和识别出的验证码一起作为表单POST上去,要提去某一个文件里的特定字符,就需要正则匹配了:

# 对于正则表达式不熟悉的同学不要紧,可以花二十分钟入门一下:

http://deerchao.net/tutorials/regex/regex.htm  主要学习一下匹配空格、匹配字母、匹配数字都是什么符号,还有转义符号,取反符号等

http://www.regexr.com  一个正则匹配的在线网站,下面把网页复制进去,然后可以在线测试你的正则规则是否合法

# 假设我们现在有了token和根据图片识别出的验证码,下一步要把他们组合成表单POST上去:

打开Chrome或火狐的F12,手动输入用户名密码验证码之后,查看网络通信,有两大类,GET和POST,查找POST,你会看到其中一个有你刚刚填的信息,那就是我们需要的,我们需要这三个,Request URL, Request Headers, Form Data,这些信息很多都是不变的,写成字符串就行,要变化的地方用变量写上去,例如:(因为Windows画图板比较方便,就在Windows环境下截图了,不要在意细节…)

how to POST a request

# 判断是否登录成功可以检查result.html的内容,至此网络部分讲解完毕,有错误的地方欢迎评论!

 

【3】验证码识别部分


2,582 views

Published by

Space

我在边城的深水区里游啊游

2 thoughts on “Python带验证码网络爬虫入门”

Leave a Reply

Your email address will not be published. Required fields are marked *