• 潭州课堂25班:Ph201805201 爬虫基础 第十三课 cookie (课堂笔记)


    # -*- coding: utf-8 -*-
    # 斌彬电脑
    # @Time : 2018/9/15 0015 4:52
    
    #cookie 是服务器发给浏览器的特殊信息
    # 可以理解为一个临时通行证
    # 以 json 形式存放
    # name:   cookie 的名称
    # value:  coikie 的值
    # domain:  可以使用此 cookie 的域名
    # path:  可以使用此 cookie 的页面路径
    # expires/Max-Age : cookie 的超时时间  默认是 session ,当浏览器关闭时失效
    # secure :  设置是否只能通过 https 来传递此条 cookie
    
    
    #  豆瓣登录
    # 抓包 按F12,在输入账号,密码框中输入相应值后,点登录,
    #  找到 302 页面跳转,这时所需要的数据就在这里 login
    
    import requests
    from urllib import request
    from lxml import etree
    from PIL import  Image
    
    
    class DoubanSpider():
        def __init__(self,us,ps):
            self.session = requests.session()
            self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36'}
            self.login_url = 'https://accounts.douban.com/login'
            self.us = us
            self.ps = ps
    
        def start_res(self):
            # 第一步先不登录,先 get 看看有没有验证码出现,
            re = self.session.get(self.login_url).content.decode()
            ht = etree.HTML(re)
            self.pass_login(ht)
    
        def pass_login(self,ht):
            captcha_id = ht.xpath('//input[@name="captcha-id"]/@value')
            # print(captcha_id)
            # 验证码下载地址
            captcha_solution = ht.xpath('//img[@id="captcha_image"]/@src')
            # print(captcha_solution)
            # 如果没有验证码
            if captcha_solution == []:
                print('没有发现验证码')
                data = {
                    'source': 'movie',
                    'redir': 'https://movie.douban.com/top250',
                    'form_email': self.us,
                    'form_password':self.ps,
                    'login': '登录'
                }
            else:
                im_path = '1.png'           # 验证码存放路径
                #  文件下载方法,      下载地址,     路径文件名
                request.urlretrieve(captcha_solution[0], im_path)
                img = Image.open(im_path).show()
                data = {
                    'source': 'movie',
                    'redir': 'https://movie.douban.com/top250',
                    'form_email': self.us,
                    'form_password':self.ps,
                    'captcha-solution': input('请输入验证码--->>'),       #  验证码
                     'captcha-id': captcha_id[0],
                    'login': '登录'
            }
            res = self.session.post(self.login_url, data=data, headers = self.headers).content.decode()
            self.login_res(res)
    
    
        # 登录成功后获取页面内容
        def login_res(self,res):
            html = etree.HTML(res)
            # 如果登录成功,r 列表中有值,否则为空列表
            r = html.xpath( '//*[@id="db-global-nav"]/div/div[1]/ul/li[2]/a/span[1]/text()' )
            if r ==[]:
                print('登录失败')
            else:print('登录成功,当前账号为:%s' %r[0])
    
    
    if __name__ == '__main__':
        lo = DoubanSpider('账号', '密码')
        lo.start_res()
    

      

      data = {
    'source': 'movie',
    'redir': 'https://movie.douban.com/top250',
    'form_email': self.us,
    'form_password':self.ps,
    'captcha-solution': input('请输入验证码--->>'), # 验证码
    'captcha-id': captcha_id[0],
    'login': '登录'
    }

    当要输入验证码时,要提交的值为data2,

    其中  captcha - solution  的值为验证码

    captcha - id 在页面源码中 ctrl  + f  搜索

     用 xpath  找到节点,可取其值

  • 相关阅读:
    在 TB1 机器上编译并调试 TB 自带sample的方法
    C++编译错误 fatal error C1189: #error : The C++ Standard Library forbids macroizing keywords. Enable warning
    c++生成随机数
    Unity调用讯飞做语音听写(Android Studio版)
    TouchDesigner 编译FlexChop
    Behavior Designer知识点
    清除Unity缓存
    UnityEngine.UI.dll is in timestamps but is not known in assetdatabase
    Unity插件学习记录 -- SW Actions
    Unity3D 使用LineRenderer制作画板功能
  • 原文地址:https://www.cnblogs.com/gdwz922/p/9649784.html
Copyright © 2020-2023  润新知