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模拟登陆实践的主要内容,如果未能解决你的问题,请参考以下文章

Python实现网站模拟登陆

通过抓包,实现Python模拟登陆各网站,原理分析!

Python模拟登陆

Python基础作业一:模拟用户登陆

Python爬虫实例网站模拟登陆

Python作业模拟登陆(第一周)