开心实习之第四天依旧Requests!

今天是我实习的第四天,今天我学习了requests库模拟会话,ccokies和session,ü存储在cookie中的数据,每次都会被浏览器自动放在http请求中,如果这些数据并不是每个请求都需要发给服务端的数据,浏览器这样设置自动处理无疑增加了网络开销;但如果这些数据是每个请求都需要发给服务端的数据(比如身份认证信息),浏览器这样设置自动处理就大大免去了重复添加操作。所以对于那些设置每次请求都要携带的信息(最典型的就是身份认证信息)就特别适合放在cookie中,其他类型的数据就不适合了。这就是cookies机制。可通过浏览器开发者工具,查看cookies。在浏览器中打开百度,打开开发者工具,选择Application选项卡。在左侧目录树中选择Cookies,就可以查看网站使用的cookie。

而cookies机制

ü Session 机制是一种 服务器端 的机制,服务器使用一种类似于 散列表 的结构(也可能就是使用散列表)来保存信息。
ü 当程序需要为某个客户端的请求创建一个 Session 时,服务器首先检查这个客户端的请求 cookie 里是否已包含了一个 Session 标识(称为 Session Id 如果已包含则说明以前已经为此客户端创建过 Session ,服务器就按照 Session Id 把这个 session 检索出来使用(检索不到,会新建一个) 如果客户端请求不包含 Session Id ,则为此客户端创建一个 Session 并且生成一个与此 Session 相关联的 Session id Session Id 的值应该是一个既不会重复,又不容易被找到规律的方式以仿造的字符串,这个 Session Id 将被在本次响应中返回给客户端保存。
ü cookie 数据存放在客户的浏览器上, session 数据放在服务器上。
ü cookie 不是很安全,别人可以分析存放在本地的 cookie 并进行 cookie 欺骗,考虑到安全应当使用 session
ü session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用 cookie
ü 单个 cookie 保存的数据不能超过 4K ,很多浏览器都限制一个站点最多保存 20 cookie
ü 可以考虑将登陆信息等重要信息存放为 session ,其他信息如果需要保留,可以放在 cookie 中。
今天我已豆瓣网站为例,登录爬取个人主页简介信息,使用密码登录,观察url地址。
import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
    "AppleWebKit/537.36 (KHTML, like Gecko) "
    "Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.41",
    "Cookie":"ll='108288'; bid=qR-Kxu85nQc; __utma=30149280.979058670.1752818433.1752818433.1752818433.1; __utmc=30149280; __utmz=30149280.1752818433.1.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; __utmt=1; user_data={%22area_code%22:%22+86%22%2C%22number%22:%2215144851323%22%2C%22code%22:%229164%22}; ap_v=0,6.0; push_noty_num=0; push_doumail_num=0; __utmv=30149280.26386; frodotk_db='782b06c0d1de59ec68811442759b0dc4'; _pk_ref.100001.2fad=%5B%22%22%2C%22%22%2C1752818660%2C%22https%3A%2F%2Fwww.douban.com%2Fpeople%2F2638688%2F%3F_i%3D2818496qR-Kxu8%22%5D; _pk_id.100001.2fad=a3f9a400b4b61078.1752818660.; _pk_ses.100001.2fad=1; vtoken=phone_reset_password%20e835c3e0ce74414fa87bbaf72ea63c15; last_login_way=account; __utmb=30149280.7.10.1752818433; login_start_time=1752818780669"
}
def login():
    try:
        url = "https://accounts.douban.com/j/mobile/login/basic"
        parm = {
            "name": "***********",
            "password": "*******",
            "remember": True
        }
        s = requests.session()
        r = s.post(url, data=parm, headers=headers)
        r.raise_for_status()
        return s
    except Exception as err:
        print(err)

def get_html(s, url):
    try:
        r = s.get(url, headers=headers)
        r.encoding = r.apparent_encoding
        r.raise_for_status()
        print("*******" in r.text)
    except Exception as err:
        print(err)

if __name__ == "__main__":
    session = login()  # 登录
    print("登录成功!")
    url = "https://www.douban.com/people/263868978/"
    get_html(session, url)  # 获取个人主页
    print("获取个人主页成功!")

像这样就可以爬取成功!

接下来我以此代码为例又爬了一下超星学习通个人简介页面,发现同样适用。代码如下:

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
    "AppleWebKit/537.36 (KHTML, like Gecko) "
    "Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.41",
    "Cookie":"fid=2065; browserLocale=zh_CN; JSESSIONID=9F4BE9113DB6D4A5E8951B096BDEC9CD; route=8dfd6a50c03ca82e777f6652212cd1; retainlogin=2; source="}
def login():
    try:
        url = "https://i.chaoxing.com/base"
        parm = {
            "name": "*********",
            "password": "***********",
            "remember": True
        }
        s = requests.session()
        r = s.post(url, data=parm, headers=headers)
        r.raise_for_status()
        return s
    except Exception as err:
        print(err)

def get_html(s, url):
    try:
        r = s.get(url, headers=headers)
        r.encoding = r.apparent_encoding
        r.raise_for_status()
        print("**" in r.text)
    except Exception as err:
        print(err)

if __name__ == "__main__":
    session = login()  # 登录
    print("登录成功!")
    url = "https://passport2.chaoxing.com/fanyalogin"
    get_html(session, url)  # 获取个人主页
    print("获取个人主页成功!")

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值