爬取企查查需要考慮到其驗證碼問題
驗證碼有兩種(滑動驗證碼和圖片驗證碼)
一、滑動驗證碼
解決辦法:使用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