zoukankan      html  css  js  c++  java
  • 爬虫第三章 模拟登录

    模拟登录

    为什么要进行模拟登录
        - 有时候我们要进行登录之后,才能爬取到的数据
    为什么要识别验证码
        - 验证码往往是作为登录中发送的请求参数进行使用的
    验证码识别: 借助于一些线上打码平台(超级鹰,云打码,打码兔)
    
    超级鹰的使用流程:
            - 注册:注册一个<用户中心>身份的账号
            - 登录:基于<用户中心>进行登录
                - 点击 软件ID -->生成一个软件id
                - 下载示例代码:点击开发文档->选择python语言->点击下载
    
    代理操作
    
    cookle操作
    
    线程池

     实例:(这里使用的是超级鹰的打码平台)

    import requests
    from lxml import etree
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'
    }
    import requests
    from hashlib import md5
    
    class Chaojiying_Client(object):
    
        def __init__(self, username, password, soft_id):
            self.username = username
            password =  password.encode('utf8')
            self.password = md5(password).hexdigest()
            self.soft_id = soft_id
            self.base_params = {
                'user': self.username,
                'pass2': self.password,
                'softid': self.soft_id,
            }
            self.headers = {
                'Connection': 'Keep-Alive',
                'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
            }
    
        def PostPic(self, im, codetype):
            """
            im: 图片字节
            codetype: 题目类型 参考 http://www.chaojiying.com/price.html
            """
            params = {
                'codetype': codetype,
            }
            params.update(self.base_params)
            files = {'userfile': ('ccc.jpg', im)}
            r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)
            return r.json()
    
        def ReportError(self, im_id):
            """
            im_id:报错题目的图片ID
            """
            params = {
                'id': im_id,
            }
            params.update(self.base_params)
            r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
            return r.json()
    
    
    def get_codeImg_text(imgPath,imgType):
        chaojiying = Chaojiying_Client('zty1304368100', 'zty130436', '899993')    #用户中心>>软件ID 生成一个替换 96001
        im = open(imgPath, 'rb').read()#本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
        return chaojiying.PostPic(im, imgType)['pic_str']
    
    session=requests.Session()
    
    url='https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx'
    page_text=session.get(url=url,headers=headers).text
    tree=etree.HTML(page_text)
    img_src='https://so.gushiwen.org'+tree.xpath('//img[@id="imgCode"]/@src')[0]
    img_info=session.get(url=img_src,headers=headers).content
    with open('./code.jpg','wb') as fp:
        fp.write(img_info)
    
    #识别二维码
    code_img_text=get_codeImg_text('./code.jpg',1902)
    print(code_img_text)
    __VIEWSTATE=tree.xpath('//input[@id="__VIEWSTATE"]/@value')[0]
    __VIEWSTATEGENERATOR=tree.xpath('//input[@id="__VIEWSTATEGENERATOR"]/@value')[0]
    login_url='https://so.gushiwen.org/user/login.aspx?from=http%3a%2f%2fso.gushiwen.org%2fuser%2fcollect.aspx'
    data={
        '__VIEWSTATE':__VIEWSTATE ,
        '__VIEWSTATEGENERATOR': __VIEWSTATEGENERATOR,
        'from': 'http://so.gushiwen.org/user/collect.aspx',
        'email': 'www.zhangbowudi@qq.com',
        'pwd': 'bobo328410948',
        'code': code_img_text,
        'denglu': '登录',
    }
    page_info=session.post(url=login_url,data=data,headers=headers).text
    with open('./gsw.html','w',encoding='utf-8') as f:
        f.write(page_info)

     技术点:

    如何使用超级鹰的打码平台
    
    如何获取验证码的图片?如何使用超级鹰将验证码图片识别成字符串的形式
        标签定位,数据提取
    
    处理动态参数
    
    传送数据时传送cookie值
    session=requests.Session()
  • 相关阅读:
    关于区间数颜色的主席树解决
    1020考试总结
    QR算法
    新的征程
    端点星2020.12.2联赛
    自我介绍&友链
    3个搜索
    搜索格式这样写
    T107073 归并排序
    还有这个题
  • 原文地址:https://www.cnblogs.com/zty1304368100/p/11019291.html
Copyright © 2011-2022 走看看