mechanize

先来说一下我们学校查询打卡的网站:
一个栗子

可以看到,想要获得打卡次数,首先需要登录
我们可以用python做一个小小的爬虫来获得打卡次数。
那么问题来了,Python如何模拟登录呢?

比较传统的方法是用抓包分析提交的数据,这里就不说了,网上有很多例子. 但是,分析包和网页代码有时候很麻烦(有些网站提交的表单数据需要经过复杂的加密,比如QQ空间).
经过一番寻找尝试,我发现了mechanize 这个库,可以说是Python模拟登录的一把利剑
这是官方网址: https://pypi.python.org/pypi/mechanize/

既然趁手的兵器有了,接下来就可以开工了(需要了解的知识有正则表达式,Python编码等, 即使不知道也可以看懂大部分代码)

思路很简单, 就是:
打开网站->检测表单->输入账号密码->提交表单->登录成功->抓取所需要的信息(正则 or BeautifulSoup)

关于正则表达式可以参看这个网站: https://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx

完整的代码如下:

# -*- coding: cp936-*-
import mechanize  #就是它!
import cookielib
import urllib
import re

def getS(html): #利用正则抓取网页
    #这里可以定义一个抓取信息的函数,至于抓啥就写啥咯

br =mechanize.Browser()
##关联cookies
cj =cookielib.LWPCookieJar()
br.set_cookiejar(cj)

#1-2的内容就是mechanize的强大之处,mechanize可以检测到表单,并可以通过输出表单内容来选择需要填写的表单

#-----------------------------------------------------------------------------1---------------------------------------------------------------------------------

## 设置一些参数,因为是模拟客户端请求,所以要支持客户端的一些常用功能
br.set_handle_equiv(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(),max_time=1)

## 这个是degbug ## 可以看到执行过程,对调试代码有帮助
#br.set_debug_http(True)
#br.set_debug_redirects(True)
#br.set_debug_responses(True)

br.addheaders =[('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.11)Gecko/20100701 Firefox/3.5.11')]##模拟浏览器头
response =br.open('******') #需要登录的那个网站

#输出登录所有需要填写的表单并打印 ,便于下一步的选择       
for f in br.forms():
    print f

br.select_form(nr=0) #根据上一步选择对应的表单

u=raw_input('输入账号\n')
print ''
p=raw_input('输入密码\n')
try:
    br.form['username'] = u #模拟填写表单'username'(这个表单的名字也是来源于输出表单那一步,括号里就是表单名了,有个=号记得要省去)
    br.form['password'] = p #同上
    br.submit() ##模拟按钮提交表单
    print ''
    html=br.response().read()#获取登录后的网页源码,其实这也是验证是否登录成功的方法之一
    getS(html)
#----------------------------------------------------------------------------2---------------------------------------------------------------------------------
except:
    print '账号密码不相符!!\n'  #抛出账号密码错误

总结:
mechanize省去了抓包的过程,跳过了大部分分析网页代码的过程. 但是mechanize也有一个很大的缺点,有些网页的表单它是检测不到的,
这时候只能通过一般方法获取登录所需要的东西,相对使用mechanize要复杂不少.

若文章有误, 请指出, 感激不尽

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值