zoukankan      html  css  js  c++  java
  • python爬虫--模拟登录知乎

    1、处理登录表单

    处理登录表单可以分为2步:

    第一、查看网站登录的表单,构建POST请求的参数字典;

    第二、提交POST请求。

    打开知乎登录界面,https://www.zhihu.com/#signin,

    按f12,打开开发者界面:

     在这里面找到headers信息,

    现在在用户名和密码处查找信息,

     发现用户名的属性为account,account中的内容为我们的用户名;

    同理,password中的内容为我们的密码。

    在登录表单中,有些key值在浏览器中设置了hidden值,不会显示出来,这个时候我们需要去审查元素中去查找,

    发现了,cookie中有一个_xsrf的属性,类似于token的作用。而这个东西的存在,就让我们在模拟登录的时候,必须将这个属性作为参数一起加在请求中发送出去。

    而获取_xsrf则可以用之前的BeautifulSoup获取

    import requests
    from bs4 import BeautifulSoup as bs
    session = requests.session()
    post_url = 'https://www.zhihu.com/#signin'
    agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/5.1.2.3000 Chrome/55.0.2883.75 Safari/537.36'
    headers = {
        "Host": "www.zhihu.com",
        "Referer":"http://www.zhihu.com/",
        'User-Agent':agent
    }
    
    postdata = {
        'password': '*****',
        'account': '******',
    }
    
    response = bs(requests.get('http://www.zhihu.com/#signin',headers=headers).content, 'html.parser')
    xsrf = response.find('input',attrs={'name':'_xsrf'})['value']
    postdata['_xsrf'] =xsrf
    responed = session.post('http://www.zhihu.com/login/email',headers=headers,data=postdata)
    print(responed)

    结果显示:

    <Response [200]>;

    代码做一些修改:

    import requests
    from bs4 import BeautifulSoup
    session = requests.session()
    agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/5.1.2.3000 Chrome/55.0.2883.75 Safari/537.36'
    headers = {
    "Host": "www.zhihu.com",
    "Origin":"https://www.zhihu.com/",
    "Referer":"http://www.zhihu.com/",
    'User-Agent':agent
    }

    postdata = {
    'password': '*****',
    'account': '******',
    }

    response = session.get("https://www.zhihu.com", headers=headers)
    soup = BeautifulSoup(response.content, "html.parser")
    xsrf = soup.find('input', attrs={"name": "_xsrf"}).get("value")
    postdata['_xsrf'] =xsrf
    login_page = session.post('http://www.zhihu.com/login/email', data=postdata, headers=headers)
    print(login_page.status_code)

    运行结果:200

    代表响应的状态为请求成功,可以成功登录表单。

  • 相关阅读:
    体检套餐管理系统
    Altium Designer9.4局域网内冲突的问题
    关于ARM Linux下的SD卡及U盘的挂载问题
    mkimage command not found – U-Boot images will not be built
    Xilinx------BUFG,IBUFG,BUFGP,IBUFGDS等含义以及使用
    linux文件压缩解压命令
    VIVADO 入门之仿真与逻辑分析仪使用
    Linux自动运行应用程序
    ZYNQ学习之二-EMIO
    inux grep 命令 搜索含有"zynq"字符的文件
  • 原文地址:https://www.cnblogs.com/leon507/p/7633012.html
Copyright © 2011-2022 走看看