欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python爬蟲之自動登錄與驗證碼識別

 更新時間:2020年06月15日 15:35:57   作者:liuwons  
這篇文章主要為大家詳細介紹了python爬蟲之自動登錄與驗證碼識別,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

在用爬蟲爬取網(wǎng)站數(shù)據(jù)時,有些站點的一些關(guān)鍵數(shù)據(jù)的獲取需要使用賬號登錄,這里可以使用requests發(fā)送登錄請求,并用Session對象來自動處理相關(guān)Cookie。

另外在登錄時,有些網(wǎng)站有時會要求輸入驗證碼,比較簡單的驗證碼可以直接用pytesser來識別,復雜的驗證碼可以依據(jù)相應的特征自己采集數(shù)據(jù)訓練分類器。

以CSDN網(wǎng)站的登錄為例,這里用Python的requests庫與pytesser庫寫了一個登錄函數(shù)。如果需要輸入驗證碼,函數(shù)會首先下載驗證碼到本地,然后用pytesser識別驗證碼后登錄,對于CSDN登錄驗證碼,pytesser的識別率很高。

其中的pytesser的下載地址為: pytesser下載

具體代碼如下:

#coding:utf-8
import sys
import time
import urllib
import shutil
import pytesser
import requests

from lxml import etree

config = {'gid': 1}

def parse(s, html, idx):
 result = {}

 tree = etree.HTML(html)
 try:
 result['lt'] = tree.xpath('//input[@name="lt"]/@value')[0]
 result['execution'] = tree.xpath('//input[@name="execution"]/@value')[0]
 result['path'] = tree.xpath('//form[@id="fm1"]/@action')[0]
 except IndexError, e:
 return None

 valimg = None
 valimgs = tree.xpath('//img[@id="yanzheng"]/@src')
 if len(valimgs) > 0:
 valimg = valimgs[0]

 validateCode = None
 if valimg:
 fname = 'img/' + str(idx) + '_' + str(config['gid']) + '.jpg'
 config['gid'] = config['gid'] + 1
 ri = s.get("https://passport.csdn.net" + valimg)
 with open(fname, 'wb') as f:
  for chk in ri:
  f.write(chk)
  f.close()
 validateCode = pytesser.image_file_to_string(fname)
 validateCode = validateCode.strip()
 validateCode = validateCode.replace(' ', '')
 validateCode = validateCode.replace('\n', '')
 result['validateCode'] = validateCode

 return result

def login(usr, pwd, idx):
 s = requests.Session()

 r = s.get('https://passport.csdn.net/account/login',
 headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0', 'Host': 'passport.csdn.net', })

 while True:
 res = parse(s, r.text, idx)
 if res == None:
  return False
 url = 'https://passport.csdn.net' + res['path']
 form = {'username': usr, 'password':pwd, '_eventId':'submit', 'execution':res['execution'], 'lt':res['lt'],}
 if res.has_key('validateCode'):
  form['validateCode'] = res['validateCode']
 s.headers.update({
  'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0',
  'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4',
  'Content-Type': 'application/x-www-form-urlencoded',
  'Host': 'passport.csdn.net',
  'Origin': 'https://passport.csdn.net',
  'Referer': 'https://passport.csdn.net/account/login',
  'Upgrade-Insecure-Requests': 1,
  })
 r = s.post(url, data=form)

 tree = etree.HTML(r.text)
 err_strs = tree.xpath('//span[@id="error-message"]/text()')
 if len(err_strs) == 0:
  return True
 err_str = err_strs[0]
 print err_str
 err = err_str.encode('utf8')

 validate_code_err = '驗證碼錯誤'
 usr_pass_err = '帳戶名或登錄密碼不正確,請重新輸入'
 try_later_err = '登錄失敗連續(xù)超過5次,請10分鐘后再試'

 if err[:5] == validate_code_err[:5]:
  pass
 elif err[:5] == usr_pass_err[:5]:
  return False
 elif err[:5] == try_later_err[:5]:
  return False
 else:
  return True

if __name__ == '__main__':
 main(sys.argv[1], sys.argv[2], 0)

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python偏函數(shù)實現(xiàn)原理及應用

    Python偏函數(shù)實現(xiàn)原理及應用

    這篇文章主要介紹了Python偏函數(shù)實現(xiàn)原理及應用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • pyqt5蒙版遮罩mask,setmask的使用

    pyqt5蒙版遮罩mask,setmask的使用

    mask()和setmask()一般是在pyqt繪圖時常見,本文就來介紹一下pyqt5蒙版遮罩mask,setmask的使用,具有一定的參考價值,感興趣的可以了解一下
    2021-06-06
  • Python實現(xiàn)的微信好友數(shù)據(jù)分析功能示例

    Python實現(xiàn)的微信好友數(shù)據(jù)分析功能示例

    這篇文章主要介紹了Python實現(xiàn)的微信好友數(shù)據(jù)分析功能,結(jié)合實例形式分析了Python使用itchat、pandas、pyecharts等模塊針對微信好友數(shù)據(jù)進行統(tǒng)計與計算相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • python 采集中文亂碼問題的完美解決方法

    python 采集中文亂碼問題的完美解決方法

    下面小編就為大家?guī)硪黄猵ython 采集中文亂碼問題的完美解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • 基于Pygame實現(xiàn)簡單的貪吃蛇游戲

    基于Pygame實現(xiàn)簡單的貪吃蛇游戲

    Pygame是一個專門用來開發(fā)游戲的Python模塊,主要用于開發(fā)、設(shè)計?2D?電子游戲。本文主要為大家介紹了通過Pygame制作一個簡單的貪吃蛇游戲,感興趣的同學可以關(guān)注一下
    2021-12-12
  • python 如何將帶小數(shù)的浮點型字符串轉(zhuǎn)換為整數(shù)

    python 如何將帶小數(shù)的浮點型字符串轉(zhuǎn)換為整數(shù)

    在python中如何實現(xiàn)將帶小數(shù)的浮點型字符串轉(zhuǎn)換為整數(shù)呢?今天小編就為大家介紹一下解決方案,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • python實現(xiàn)三子棋游戲

    python實現(xiàn)三子棋游戲

    這篇文章主要為大家詳細介紹了python實現(xiàn)三子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Python畫圖工具Matplotlib庫常用命令簡述

    Python畫圖工具Matplotlib庫常用命令簡述

    這篇文章主要介紹了Python畫圖Matplotlib庫常用命令簡述總結(jié),文中包含詳細的圖文示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • Python輕量級web框架bottle使用方法解析

    Python輕量級web框架bottle使用方法解析

    這篇文章主要介紹了Python輕量級web框架bottle使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Python?Flask實現(xiàn)后臺任務輕松構(gòu)建高效API應用

    Python?Flask實現(xiàn)后臺任務輕松構(gòu)建高效API應用

    本文介紹如何使用Python?Flask框架實現(xiàn)后臺任務,以快速構(gòu)建高效的API應用。通過實例演示,讀者將學會如何利用Flask框架搭建后臺任務,實現(xiàn)異步處理和多線程操作等高級功能,提升應用性能和用戶體驗
    2023-04-04

最新評論