python爬虫-cookie登录
http/https协议的特性:无状态
模拟登录之后仍然没有请求到对应页面的信息是因为 发起第二次基于个人页面的请求时,服务器端并不知道还请求是基于用户登录的请求
cookie:用来让服务器端记录客户端相关状态
那么解决这个问题就可以有下面两种方法:
- 手动Cookie方法(利用浏览器抓包工具获取Cookie)
- 自动获取Cookie
Cookie值的来源是模拟登录时由服务器端创建的。
需要使用到session会话对象。可以发送请求,如果请求过程中产生了cookie,则该cookie会被自动存储/携带在该session中
有的网站的Cookie是有有效时长或是动态变化的不推荐使用第一种方法。
Cookie登陆古诗文网
"""
验证码识别案例:登录古诗文网
"""
import requests
from lxml import etree
if __name__ == '__main__':
# 需要用到seesion
session = requests.Session()
# UA伪装
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) "
"Version/14.1 Safari/605.1.15 "
}
# 登录页面url
login_page_url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
login_page = session.get(url=login_page_url, headers=headers)
tree = etree.HTML(login_page.text)
# 获取验证码图片
img_url = 'https://so.gushiwen.cn' + tree.xpath('//img[@id="imgCode"]/@src')[0]
print(img_url)
img_data = session.get(url=img_url, headers=headers).content
# 持久化存储
img_path = '../data3/VerificationCode/gushi_code.jpg'
with open(img_path, 'wb') as fp:
fp.write(img_data)
print("验证码图片已存储,请注意查看!")
# 人工识别验证
code = input("人工识别验证码为:\n")
# post请求发送(模拟登录)
# 对login日志中post的url发起请求
login_url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
# 携带参数
data = {
'from': 'http://so.gushiwen.cn/user/collect.aspx',
'email': '你的账号',
'pwd': '你的密码',
'code': code,
'denglu': '登录'
}
# 使用session发起post请求
home_page = session.post(url=login_url, headers=headers, data=data)
print(home_page.status_code)
with open('../data3/gushi.html', 'w', encoding='utf-8') as fp:
fp.write(home_page.text)
print("完成")
person_url = 'https://so.gushiwen.cn/user/collect.aspx'
person_page = session.get(url=person_url, headers=headers)
with open('../data3/gushi_person.html', 'w', encoding='utf-8') as fp:
fp.write(person_page.text)
print("完成")
验证码自己看一眼图片输入哦