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

    前面已经介绍过,运用表单填写帐号,用户名的方式模拟登录知乎。若登录成功,则之后就可以利用cookie登入,无需重复之前步骤。

    import requests
    import http.cookiejar
    from bs4 import BeautifulSoup
    session = requests.Session()
    session.cookies = http.cookiejar.LWPCookieJar("cookie")
    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
    result = session.post('http://www.zhihu.com/login/email', data=postdata, headers=headers)
    session.cookies.save(ignore_discard=True, ignore_expires=True)

    运行后,在代码所在文件夹中出现cookie文件。

    现在加载cookie登录:

    import requests
    import http.cookiejar as cookielib
    session = requests.session()
    session.cookies = cookielib.LWPCookieJar(filename='cookie')
    try:
        session.cookies.load(ignore_discard=True)
    except:
           print("Cookie 未能加载")
    def isLogin():
        url = "https://www.zhihu.com/"
        login_code = session.get(url, headers=headers, allow_redirects=False).status_code
        if login_code == 200:
            return True
        else:
            return False
    if __name__ == '__main__':
        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
        }
        if isLogin():
            print('您已经登录')

    运行后显示:您已经登录。

    cookielib模块的主要作用是提供可存储cookie的对象,以便于requests模块配合使用来访问Internet资源。Cookielib模块非常强大,我们可以利用本模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送,比如可以实现模拟登录功能。该模块主要的对象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。

    它们的关系:CookieJar —-派生—->FileCookieJar  —-派生—–>MozillaCookieJar和LWPCookieJar

    默认的是FileCookieJar没有实现save函数。

    而MozillaCookieJar或LWPCookieJar都已经实现了。

    所以可以用MozillaCookieJar或LWPCookieJar,去自动实现cookie的save。

    CookieJar                       

                                /    

                FileCookieJar      

                 /                       

     MozillaCookieJar      LWPCookieJar       

  • 相关阅读:
    Fix RICHTX32.OCX Issue on Windows 7
    Solved: c:\windows\system32\config\systemprofile\desktop
    递归的现实应用
    Win 8 app 获取窗口的宽度和高度, 本地化, 及文本读取
    均匀设计U Star 665
    GridView.ScrollIntoView() doesn't work
    XML节点访问与更新
    Keyboard supports in Software Testing
    WordPress程序备受喜爱的原因:十八般武艺
    paypal注册教程(PP注册教程)paypal使用方法
  • 原文地址:https://www.cnblogs.com/leon507/p/7652148.html
Copyright © 2011-2022 走看看