浏览器通过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文件操作。