美文网首页linux运维
python爬虫-06-实现自动登录,python模拟登录博客园

python爬虫-06-实现自动登录,python模拟登录博客园

作者: 运维家 | 来源:发表于2022-05-26 22:42 被阅读0次

    上一篇中我们实现自动登录的方式,是通过浏览器先登录一遍,然后获取浏览器中的cookie,放到代码中之后进行访问的,那么,我们这次就使用代码携带我们自己的用户名、密码来请求网站,让指定网站给我们的代码返回cookie,之后通过cookie来访问指定页面。

    1、使用python模拟登录博客园

    (1)介绍

    • CookieJar:管理HTTP cookie值、存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。整个cookie都存储在内存中,对CookieJar实例进行垃圾回收后cookie也将丢失。
    • FileCookieJar (filename,delayload=None,policy=None):从CookieJar派生而来,用来创建FileCookieJar实例,检索cookie信息并将cookie存储到文件中。filename是存储cookie的文件名。delayloadTrue时支持延迟访问访问文件,即只有在需要时才读取文件或在文件中存储数据。
    • MozillaCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与Mozilla浏览器 cookies.txt兼容的FileCookieJar实例。
    • LWPCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与libwww-perl标准的 Set-Cookie3 文件格式兼容的FileCookieJar实例。

    (2)流程梳理

    1. 创建一个cookiejar对象
    2. 使用cookiejar创建一个 HTTPCookiePrecess对象
    3. 使用上一步的对象,创建一个opener
    4. 使用opener发送登录的请求

    (3)实操代码

    博客园登录地址和实际访问页面:

    登录地址:
    https://account.cnblogs.com/signin
    实际访问页面:
    https://www.cnblogs.com/yunweijia/

    代码如下:

    from urllib import request, parse
    from http.cookiejar import CookieJar

    Header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36'
    }

    cookiejar = CookieJar()
    jier = request.HTTPCookieProcessor(cookiejar)
    opener = request.build_opener(jier)
    data = {'input1': '2276845534@qq.com', 'input2': 'yunweijia@123', 'remember': True}  # 我的密码有误哈,配置自己的
    data = parse.urlencode(data).encode('utf-8')
    Login_Url = 'https://passport.cnblogs.com/user/signin'
    Reqs = request.Request(Login_Url, headers=Header, data=data)
    opener.open(Reqs)
    Ceshi_Url = 'https://www.cnblogs.com/yunweijia/'
    Reqs_2 = request.Request(Ceshi_Url, headers=Header)
    Reqs_3 = opener.open(Reqs_2)
    with open('yunweijia.html', 'w', encoding='utf-8') as yunweijia:
        yunweijia.write(Reqs_3.read().decode('utf-8'))

    返回结果如下:

    说明已经访问到了,只是说有些静态资源没有获取到而已,这个不算问题,因为我们也不是来获取静态资源的,我们想要的内容已经有了。

    (4)代码优化

    可能上面代码有点儿乱码,我们优化一下:

    from urllib import request, parse
    from http.cookiejar import CookieJar

    Header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36'
    }


    # 初始化
    def Start_Request():
        cookiejar = CookieJar()
        jier = request.HTTPCookieProcessor(cookiejar)
        opener = request.build_opener(jier)
        return opener


    # 登录博客园
    def Login_Adress(opener):
        data = {'input1': '2276845534@qq.com', 'input2': 'nihao@123456', 'remember': True}
        data = parse.urlencode(data).encode('utf-8')
        Login_Url = 'https://passport.cnblogs.com/user/signin'
        Reqs = request.Request(Login_Url, headers=Header, data=data)
        opener.open(Reqs)


    # 测试获取博客园信息
    def Test_Message(opener):
        Ceshi_Url = 'https://www.cnblogs.com/yunweijia/'
        Reqs_2 = request.Request(Ceshi_Url, headers=Header)
        Reqs_3 = opener.open(Reqs_2)
        with open('yunweijia.html', 'w', encoding='utf-8') as yunweijia:
            yunweijia.write(Reqs_3.read().decode('utf-8'))


    if __name__ == '__main__':
        opener = Start_Request()
        Login_Adress(opener)
        Test_Message(opener)

    2、将cookie保存到本地

    有时候一个网站的cookie的到期时间还是挺长的,其次是如果我们多次登录同一个网站,也有可能会被认为你这个IP地址有问题,从而给你封禁,那么我们就可以将第一次请求到的cookie信息,保存在本地,后面可以多次调用该cookie即可。

    这个时候我们如何模拟呢?还是使用之前我们介绍过的httpbin网站就行了,代码如下:

    from urllib import request
    from http.cookiejar import MozillaCookieJar

    cookiejar = MozillaCookieJar("cookie.txt")
    handler = request.HTTPCookieProcessor(cookiejar)
    opener = request.build_opener(handler)

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36'
    }
    req = request.Request('http://httpbin.org/cookies/set?test=yunweijia', headers=headers)
    resp = opener.open(req)
    print(resp.read())
    cookiejar.save(ignore_discard=True, ignore_expires=True)
    # ignore_discard:即使cookies将被丢弃也将它保存下来
    # ignore_expires:即使cookies已经过期,也将它保存并且文件已存在时将覆盖

    输出在了一个文件cookie.txt中,文件内容如下:

    # Netscape HTTP Cookie File
    # http://curl.haxx.se/rfc/cookie_spec.html
    # This is a generated file!  Do not edit.

    httpbin.org FALSE / FALSE  test yunweijia

    3、使用保存在本地的cookie

    直接上代码吧,原理就是读取上一步报存的cookie嘛;

    剩余内容请转至VX公众号 “运维家” ,回复 “169” 查看。

    ------ “运维家” ,回复 “169”  ------

    ------ “运维家” ,回复 “169”  ------

    ------ “运维家” ,回复 “169”  ------

    linux卸载硬盘,win7共享linux,linuxgdal安装,Linux7忘记密码,linux怎么进入文件的子目录,高通开源代码linux,linuxusr大小,重启服务器的linux命令,linux的jdk怎么安装啊;

    linuxtar文件打不开,linux常用状态检测,linux成功开机界面,linux七种文件,linux命令,Linux+删除数据的命令,linux自动监听重启服务器,如何快速担任linux运维,Linux返回到波浪线,linux大数据架构搭建。

    相关文章

      网友评论

        本文标题:python爬虫-06-实现自动登录,python模拟登录博客园

        本文链接:https://www.haomeiwen.com/subject/ahipprtx.html