当前位置:
Python爬虫模拟登录带验证码网站
时间:2025-11-05 16:01:57 出处:娱乐阅读(143)
爬取网站时经常会遇到需要登录的爬虫问题,这是模拟就需要用到模拟登录的相关方法。python提供了强大的登录带验url库,想做到这个并不难。证码这里以登录学校教务系统为例,网站做一个简单的爬虫例子。

首先得明白cookie的模拟作用,cookie是登录带验某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的证码数据。因此我们需要用Cookielib模块来保持网站的亿华云网站cookie。
可以发现这个验证码是爬虫动态更新的每次打开都不一样,一般这种验证码和cookie是模拟同步的。其次想识别验证码肯定是登录带验吃力不讨好的事,因此我们的证码思路是首先访问验证码页面,保存验证码、网站获取cookie用于登录,然后再直接向登录地址post数据。
首先通过抓包工具或者火狐或者谷歌浏览器分析登录页面需要post的香港云服务器request和header信息。以谷歌浏览器为例。


其中需要提交的表单数据中txtUserName和TextBox2分别用户名和密码。
现在直接到关键部分
上代码!!
import urllib2 import cookielib import urllib import re import sys 模拟登录 reload(sys) sys.setdefaultencoding("utf-8") # 防止中文报错 CaptchaUrl = "http://202.115.80.153/CheckCode.aspx" PostUrl = "http://202.115.80.153/default2.aspx" # 验证码地址和post地址 cookie = cookielib.CookieJar() handler = urllib2.HTTPCookieProcessor(cookie) opener = urllib2.build_opener(handler) # 将cookies绑定到一个opener cookie由cookielib自动管理 username = username password = password123 # 用户名和密码 picture = opener.open(CaptchaUrl).read() # 用openr访问验证码地址,获取cookie local = open(e:/image.jpg, wb) local.write(picture) local.close() # 保存验证码到本地 SecretCode = raw_input(输入验证码:) # 打开保存的验证码图片 输入 postData = { __VIEWSTATE: dDwyODE2NTM0OTg7Oz6pH0TWZk5t0lupp/tlA1L+rmL83g==, txtUserName: username, TextBox2: password, txtSecretCode: SecretCode, RadioButtonList1: 学生, Button1: , lbLanguage: , hidPdrs: , hidsc: , } # 根据抓包信息 构造表单 headers = { Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8, Accept-Language: zh-CN,zh;q=0.8, Connection: keep-alive, Content-Type: application/x-www-form-urlencoded, User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36, } # 根据抓包信息 构造headers data = urllib.urlencode(postData) # 生成post数据 ?key1=value1&key2=value2的形式 request = urllib2.Request(PostUrl, data, headers) # 构造request请求 try: response = opener.open(request) result = response.read().decode(gb2312) # 由于该网页是gb2312的编码,所以需要解码 print result # 打印登录后的页面 except urllib2.HTTPError, e: print e.code # 利用之前存有cookie的opener登录页面登录成功后便可以利用该openr访问其他需要登录才能访问的页面。
分享到:
温馨提示:以上内容和图片整理于网络,仅供参考,希望对您有帮助!如有侵权行为请联系删除!
猜你喜欢
- K99耳机的声音品质如何?(揭秘K99耳机的音质表现和用户体验)
- 多云容器编排 Karmada-Operator 实践
- 一个宽带装两个路由器怎么设置?
- 86%的受访者表示物联网的好处在于提高效率和增加收入
- 护你妹卫生巾的优点与使用方法(选择合适的护你妹卫生巾,让你妹妹更舒适自在)
- AI增强型网络钓鱼劫持开发人员工作流程的六种方式及应对策略
- 企业必须警惕这些最新的社交攻击趋势
- 工业物联网和制造业将成最大5G市场之一
- 我们在Linux中编程的时候,有时候会发现,用户名太长了真不好。特别是虚拟机小窗口显示的时候,前面的路径一个个加在一起,结果路径就变得好长。这样我们的命令没敲几个就要换行,很麻烦,那么怎么将Linux的用户名改短一下呢?1、我们直接在当前用户下,用usermod,发现会出错,如下:2、显示的错误是:用户hujinjin当前正在使用。3、我们将当前hujinjin用户注销,再用其他的用户来登录,再切换到root用户,再来执行修改用户名的操作,如下图:4、可知修改成功了,不过,我的hjj用户的主目录的文件夹的名字还是hujinjin,并没有改为hjj。我们想要的效果还是没有达到,我们尝试将hujinjin文件夹改名为hjj,文件夹改名后.但是问题出现了,现在找不到hjj用户的家目录,那么我们只有将系统中存储的hjj的主目录由hujinjin改为hjj.修改前如下:5、修改后,如下:6、修改完成后,我们在root用户下切换到hjj用户,发现能够正常切换到用户主目录了,如下:7、修改完成!