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()

登陆成功,接下来就可以爬取你想要的数据了

原文地址:https://www.cnblogs.com/jinjidedale/p/7127696.html