python模拟登陆实践
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python模拟登陆实践相关的知识,希望对你有一定的参考价值。
对于一些需要登陆的网址爬取数据,需要登录才能访问。本文介绍如何利用python进行模拟登陆
准备工具:
1.搭建django 框架 用于模拟登陆
2.fiddler抓包工具,chrome浏览器
3.pycharm 编辑器
步骤:
1.开启django 服务,这里就不多描述,直接百度一下,就能找到很多答案(记得创建一个superuser,以便后面的登陆 )
进入 http://127.0.0.1:8000/admin/ 这是django自带的后台,进行登陆时,django自带了 csrf 跨站脚本攻击的防御系统,这里进入浏览器的调试模式,找到csrf 所在标签下的value值
django通过改变这个value值,来达到防止跨站攻击的效果。
2.用先前创建的superuser账号 123 zxc123456进行登陆,同时使用fiddler进行抓包
这里就是进行表单提交时需要的参数
# coding=utf-8 import requests from lxml import etree # 请求头也可以从fiddler中直接复制过来,按照字典的格式 headers = {‘Accept‘: ‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8‘, ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36‘, ‘Accept-Encoding‘: ‘gzip, deflate‘, ‘Accept-Language‘: ‘zh-CN,zh;q=0.8‘, } # 建立一个会话,可以把同一用户的不同请求联系起来;直到会话结束都会自动处理cookies session = requests.Session() def get_xsrf(): """ 获取参数 """ response = session.get(‘http://127.0.0.1:8000/admin‘, headers=headers) html =response.text selector = etree.HTML(html)
# 这里我是通过xpath获取value值,也可以通过正则表达式 _xsrf = selector.xpath(‘//*[@id="login-form"]/input/@value‘) print _xsrf,html return _xsrf def login(): # url通过fiddler抓取登陆时的url url = ‘http://127.0.0.1:8000/admin/login/?next=/admin/‘ data = {‘csrfmiddlewaretoken‘: get_xsrf(), ‘username‘: 123, ‘password‘: ‘zxc123456‘, } # 带表单的post请求 result = session.post(url, data=data, headers=headers) # 登陆成功后可以通过 请求需要登陆的地址进行测试
# result2 = session.get(‘url‘,headers=heders)
# print result2.text
print result.text if __name__ == ‘__main__‘: login()
登陆成功,接下来就可以爬取你想要的数据了
以上是关于python模拟登陆实践的主要内容,如果未能解决你的问题,请参考以下文章