爬取企查查

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

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

一、滑动验证码

解决办法:使用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

 

转载于:https://www.cnblogs.com/renshaoqi/p/10956950.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值