zoukankan      html  css  js  c++  java
  • 爬取企查查

    爬取企查查需要考虑到其验证码问题

    验证码有两种(滑动验证码和图片验证码)

    一、滑动验证码

    解决办法:使用selenium技术

    1 先获取到需滑动的块状

    2 进行滑动、点击按钮

    具体代码如下:

    def get_track(distance):
        track = []
        current = 0
        mid = distance * 3 / 4
        t = 0.2
        v = 0
        while current < distance:
            if current < mid:
                a = 2
            else:
                a = -3
            v0 = v
            v = v0 + a * t
            move = v0 * t + 1 / 2 * a * t * t
            current += move
            track.append(round(move))
        return track
    
    
    # 滑动验证码识别
    def slide_discern():
        print("滑块验证码验证中。。。")
       #创建无界面模式 chrome_options = Options() chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') driver = webdriver.Chrome(chrome_options=chrome_options)
       # 获取到需滑动的按钮 source = driver.find_element_by_xpath('//*[@id="nc_1_n1z"]') action = ActionChains(driver) # 按住左键不放 action.click_and_hold(source).perform() # 开始滑动 distance = 340
       # 模拟以人为速度拖动 track = get_track(distance) for i in track: action.move_by_offset(xoffset=i, yoffset=0).perform() action.reset_actions() # 释放鼠标 action.release().perform()

    二 :图片验证码

    解决办法:使用第三方平台进行验证(超级鹰)

    超级鹰使用方法:

    1:登陆网址:http://www.chaojiying.com/ 进行注册

    2:注册完成点击菜单栏中开发者文档,下载python代码文件

    点击下载

    解压文件 把里面的chaojiying.py 复制到你本人项目目录中,共以下步骤使用

     

    3、进入超级鹰的用户中心生成软件ID

    点击提交会出现一个软件ID列表

    复制软件ID 待会 会使用到

     将下载好的chaojiying.py 文件打开

    可以看到 要使用chaojiying就会用到用户名、密码、以及刚刚创建的软件ID

    那么下面就是就让我们来看看代码吧

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver import ActionChains
    import time
    from PIL import Image
    from work.chaojiying import Chaojiying
    # 用户名
    CHAOJIYING_USERNAME = 'xxxx'
    # 密码
    CHAOJIYING_PASSWORD = 'xxxx'
    # 软件ID
    CHAOJIYING_SOFT_ID = xxxx
    # 验证码类型
    CHAOJIYING_KIND = 1004
    
    # 图片验证码识别
    def image_discern():
        print("图片验证码验证中。。。")
        # 设置无头浏览器
        chrome_options = Options()
        chrome_options.add_argument('--headless')
        chrome_options.add_argument('--disable-gpu')
        driver = webdriver.Chrome(chrome_options=chrome_options)
        
        driver.implicitly_wait(2)
        # 截取图片
        driver.get_screenshot_as_file('yzm.png')
        # 获取验证码图片位置
        img = driver.find_element_by_xpath('//*[@id="nc_1__imgCaptcha_img"]/img')
        i_left = img.location["x"]
        i_top = img.location["y"]
        i_right = i_left + img.size["width"]
        i_bottom = i_top + img.size["height"]
        im = Image.open("yzm.png")
        img = im.crop((i_left, i_top, i_right, i_bottom))
        img.save("succeed.png")
    
        # 超级鹰识别
        print("超级鹰识别验证码中。。。")
        # 创建超级鹰对象
        chaojiying = Chaojiying(CHAOJIYING_USERNAME, CHAOJIYING_PASSWORD, CHAOJIYING_SOFT_ID)
        with open('succeed.png', 'rb') as f:
            image = f.read()
        # 使用超级鹰识别验证码
        result = chaojiying.post_pic(image, CHAOJIYING_KIND)
        code = result["pic_str"]
        print("验证码:", code)
        # 输入验证码
        driver.find_element_by_xpath('//*[@id="nc_1_captcha_input"]').send_keys(code)
        driver.implicitly_wait(3)
        # 点击提交验证码按钮
        time.sleep(1)
        driver.find_element_by_xpath('//*[@id="nc_1_scale_submit"]').click()
        time.sleep(1)
        # 点击登陆按钮
        print("点击按钮验证一下")
        driver.find_element_by_xpath('//*[@id="verify"]').click()

    验证码类型 CHAOJIYING_KIND = 1004

    可参考:http://www.chaojiying.com/price.html

  • 相关阅读:
    ZeroMQ自查手册
    如何回答——请简述MySQL索引类型
    101. 对称二叉树
    66. 加一
    104. 二叉树的最大深度
    724.寻找数组的中心索引
    33. 搜索旋转排序数组
    快速排序
    Vue
    HTML
  • 原文地址:https://www.cnblogs.com/renshaoqi/p/10956950.html
Copyright © 2011-2022 走看看