码迷,mamicode.com
首页 > 编程语言 > 详细

python模拟登陆实践

时间:2017-07-06 20:52:44      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:head   XML   main   images   code   地址   表达式   data   html   

对于一些需要登陆的网址爬取数据,需要登录才能访问。本文介绍如何利用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模拟登陆实践

标签:head   XML   main   images   code   地址   表达式   data   html   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!