python笔记--模拟登陆

浏览器通过cookie的方式来检验用户的登陆状态。

1.可以通过从浏览器复制cookie到headers来进行模拟登陆。cookie的获取和之前的UA获取方式一样。

import requests
from fake_useragent import UserAgent

mycookie_from_copy = ' '#这里填上从网页复制来的cookie信息

ua = UserAgent()
headers = {'User-Agent': ua.random,
           'Cookie': mycookie_from_copy
            }

'''
以下是登陆之后才能访问到的个人信息页面
'''

url = 'https://www.douban.com/people/146448257/'
data = requests.get(url, headers=headers)

print(data.status_code)
print(data.requests.headers)
print(data.text)

2.cookie 是有一定的有效期,过一段时间就会失败,每次手动获取笔记麻烦,因此还有另一种方法,通过表单模拟登陆。
以下图片的form data就是表单数据。这里写图片描述

只需要将表单数据提交给服务器即可通过认真而登陆成功。

import requests
import pickle
from fake_useragent import UserAgent
from bs4 import BeautifulSoup

def get_cookie_from_net():
    url = 'https://accounts.douban.com/login' 
    payload = {'source': 'None',
                'redir': 'https://www.douban.com/',
                #以下两项根据自己的账号密码填写
                'form_email': ' ',
                'form_password': ' ',
                'login': '登陆'
                }
    data = s.post(url , headers=headers, data=payload, verify=true)
    with open('cookies.douban', 'wb') as f:
        cookiedict = requests.utils.dict_from_cookiegar(s.cookies)
        pickple.dump(cookiedict, f)
    print("提交表单登陆,成功获取cookies...")
    return s.cookies

def get_cookie_from_file():
    with open('cookie.douban', 'rb') as f:
        cookiedict = pickle.load(f)
        cookies = requests.utils.cookiejar_from_dict(cookiedict)
    print("解析文件,成功获取cookies...")
    return cookies

def get_data(html):
    soup = BeautifulSoup(html.text, 'lxml')
    mydata = soup.select('#display')[0].get_text()
    return mydata 

def login_and_getdata():
    print('获取cookies...')
    try:
        s.cookies = get_cookie_from_file()
    except:
        print("从文件中获取cookies失败...\n正尝试提交表单登陆获取cookies...")
        s.cookies = get_cookie_from_net()
    html = s.get('https://www.douban.com/people/146448257/', headers = headers)
    data = get_data(html)
    print(data)


if __name__ == '__main__':
    s = requests.seesion()
    ua = UserAgent()
    headers = {'User-Agent': ua.random}

    login_and_getdata() 

该过程为,首先通过表单登陆,获取cookie; 然后将其保存至文件;之后直接从文件获取cookie,转给session对象s;最后进行数据获取操作。

(1)session:seesion对象能够跨请求保持某些参数。
(2)pickle:dump和load进行cookie文件操作。

猜你喜欢

转载自blog.csdn.net/weixin_39088580/article/details/82621000