【 crawler advanced】 verification code Processing: Using the codage Platform (anti - Crawling)

Zsyl 2021-08-19 22:23:33 阅读数:903

crawler advanced verification code processing


Objectifs d'apprentissage

  1. Compris. Connaissance des codes de vérification
  2. Maîtrise Utilisation du moteur de reconnaissance d'image
  3. Compris. Plate - forme de codage commune
  4. Maîtrise Méthode de traitement du Code de vérification par plate - forme de codage

1.Code de vérification de l'image

1.1 Qu'est - ce qu'un code de vérification d'image

  • Code de vérification(CAPTCHA)- Oui.“Completely Automated Public Turing test to tell Computers and Humans Apart”( Test Turing entièrement automatisé pour distinguer les ordinateurs des humains )Abréviation de, Est un programme public entièrement automatisé qui distingue l'utilisateur d'un ordinateur ou d'une personne .

1.2 Le rôle du Code de vérification

  • Empêcher le piratage malveillant des mots de passe 、 Brossez les billets 、 Arrosage du Forum 、 Brossage des pages . Empêche efficacement un hacker d'essayer continuellement de se connecter à un utilisateur enregistré spécifique en utilisant des méthodes de craquage de violence de programme spécifiques , .En fait, l'utilisation de codes de vérification est une façon courante pour de nombreux sites Web ( Comme la Banque personnelle en ligne de la China Merchants Bank , Baidu Community ), Nous l'avons fait d'une manière plus simple . Bien que la connexion soit un peu gênante , Mais cette fonctionnalité est encore nécessaire pour la sécurité cryptographique des internautes , C'est aussi important .

1.3 Scènes d'utilisation du Code de vérification d'image dans le crawler

  • Inscription
  • Connexion
  • Lorsque les demandes sont envoyées fréquemment , Le serveur éjecte le Code de vérification pour vérifier

1.4 Schéma de traitement du Code de vérification de l'image

  • Entrée manuelle (input)
    Cette méthode se limite à l'utilisation durable d'une seule connexion
  • Résolution du moteur de reconnaissance d'image
    Traitement des données dans les images à l'aide d'un moteur de reconnaissance optique , Actuellement couramment utilisé pour l'extraction de données d'image , Moins utilisé pour le traitement des codes de vérification
  • Plate - forme de codage
    Les solutions de code de vérification couramment utilisées par les reptiles

2.Moteur de reconnaissance d'image

OCR(Optical Character Recognition) Est l'utilisation d'un scanner ou d'une caméra numérique pour numériser des données textuelles dans un fichier image , Le fichier image est ensuite analysé , Logiciel d'identification automatique pour obtenir des informations textuelles et de mise en page .

2.1 Qu'est - ce quetesseract

  • Tesseract, Un par HP Le laboratoire a été développé par Google Open source pour la maintenance OCRMoteur, Caractéristiques open source ,Gratuit,Support multilingue,Multiplateforme.
  • Adresse du projet:https://github.com/tesseract-ocr/tesseract

2.2 Installation d'un environnement moteur de reconnaissance d'image

1 Installation du moteur

  • mac Exécution directe des commandes dans l'environnement
brew install --with-training-tools tesseract
  • windows Installation dans l'environnement
    Peut passerexe Installation du paquet d'installation , L'adresse de téléchargement est disponible à partir de GitHubDans le projetwikiTrouver. N'oubliez pas de Tesseract Le répertoire des fichiers d'exécution est ajouté à PATHMoyenne, Pour faciliter les appels ultérieurs .

  • linux Installation dans l'environnement

sudo apt-get install tesseract-ocr

2 PythonInstallation de la Bibliothèque

# PIL Pour ouvrir un fichier image 
pip/pip3 install pillow
# pytesseract Le module est utilisé pour analyser les données de l'image 
pip/pip3 install pytesseract

2.3 Utilisation du moteur de reconnaissance d'image

  • AdoptionpytesseractDu module image_to_string .La méthode extrait les données du fichier image ouvert en données de chaîne , Les méthodes spécifiques sont les suivantes
from PIL import Image
import pytesseract
im = Image.open()
result = pytesseract.image_to_string(im)
print(result)

2.4 Extension de l'utilisation du moteur de reconnaissance d'image

MicrosoftAzure Reconnaissance d'images:https://azure.microsoft.com/zh-cn/services/cognitive-services/computer-vision/
Reconnaissance de texte Dao Zhi Yun :http://aidemo.youdao.com/ocrdemo
.Alibaba Cloud picture and Text Recognition :https://www.aliyun.com/product/cdi/
TencentOCRReconnaissance de texte:https://cloud.tencent.com/product/ocr

3.Plate - forme de codage

3.1 Pourquoi faut - il comprendre l'utilisation de la plate - forme de codage

Aujourd'hui, de nombreux sites Web utilisent des codes de vérification pour l'anti - escalade , Donc pour avoir un meilleur accès aux données , Besoin de savoir comment utiliser le Code de vérification dans le crawler de plate - forme de codage

3.2 Plate - forme de codage commune

  1. Code Cloud :http://www.yundama.com/

    Capable de résoudre l'identification universelle des codes de vérification

  2. Code de vérification polaire aide à l'identification intelligente :http://jiyandoc.c2567.com/

    Identification capable de résoudre des codes de vérification complexes

3.3 Utilisation du Code Cloud

Voici un exemple de code Cloud , C'est quoi ce truc?Apprenez comment utiliser la plateforme de codage

3.4 Interface officielle de codage Cloud

Le code suivant est fourni par la plateforme de codage Cloud , J'ai fait un simple changement , Deux méthodes ont été mises en œuvre :

  1. indetify: Le binaire de réponse de l'image entrante est juste
  2. indetify_by_filepath: Le chemin de l'image entrante est reconnu

Ce qu'il faut configurer, c'est :

username = 'whoarewe' # Nom d'utilisateur
password = '***' # Mot de passe
appid = 4283 # appid
appkey = '02074c64f0d0bb9efb2df455537b01c3' # appkey
codetype = 1004 # Type de code de vérification

Cloud Code Official provided apiComme suit:

#yundama.py
import requests
import json
import time
class YDMHttp:
apiurl = 'http://api.yundama.com/api.php'
username = ''
password = ''
appid = ''
appkey = ''
def __init__(self, username, password, appid, appkey):
self.username = username
self.password = password
self.appid = str(appid)
self.appkey = appkey
def request(self, fields, files=[]):
response = self.post_url(self.apiurl, fields, files)
response = json.loads(response)
return response
def balance(self):
data = {
'method': 'balance', 'username': self.username, 'password': self.password, 'appid': self.appid,
'appkey': self.appkey}
response = self.request(data)
if (response):
if (response['ret'] and response['ret'] < 0):
return response['ret']
else:
return response['balance']
else:
return -9001
def login(self):
data = {
'method': 'login', 'username': self.username, 'password': self.password, 'appid': self.appid,
'appkey': self.appkey}
response = self.request(data)
if (response):
if (response['ret'] and response['ret'] < 0):
return response['ret']
else:
return response['uid']
else:
return -9001
def upload(self, filename, codetype, timeout):
data = {
'method': 'upload', 'username': self.username, 'password': self.password, 'appid': self.appid,
'appkey': self.appkey, 'codetype': str(codetype), 'timeout': str(timeout)}
file = {
'file': filename}
response = self.request(data, file)
if (response):
if (response['ret'] and response['ret'] < 0):
return response['ret']
else:
return response['cid']
else:
return -9001
def result(self, cid):
data = {
'method': 'result', 'username': self.username, 'password': self.password, 'appid': self.appid,
'appkey': self.appkey, 'cid': str(cid)}
response = self.request(data)
return response and response['text'] or ''
def decode(self, filename, codetype, timeout):
cid = self.upload(filename, codetype, timeout)
if (cid > 0):
for i in range(0, timeout):
result = self.result(cid)
if (result != ''):
return cid, result
else:
time.sleep(1)
return -3003, ''
else:
return cid, ''
def post_url(self, url, fields, files=[]):
# for key in files:
# files[key] = open(files[key], 'rb');
res = requests.post(url, files=files, data=fields)
return res.text
username = 'whoarewe' # Nom d'utilisateur
password = '***' # Mot de passe
appid = 4283 # appid
appkey = '02074c64f0d0bb9efb2df455537b01c3' # appkey
filename = 'getimage.jpg' # Emplacement du fichier
codetype = 1004 # Type de code de vérification 
# Temps mort
timeout = 60
def indetify(response_content):
if (username == 'username'):
print('请设置好相关参数再测试')
else:
# Initialisation
yundama = YDMHttp(username, password, appid, appkey)
# Connectez - vous au Code Cloud 
uid = yundama.login();
print('uid: %s' % uid)
# Rechercher le solde 
balance = yundama.balance();
print('balance: %s' % balance)
# Commencez à reconnaître ,Chemin de l'image, Type de code de vérification ID,Temps mort(Secondes),Résultats de l'identification
cid, result = yundama.decode(response_content, codetype, timeout)
print('cid: %s, result: %s' % (cid, result))
return result
def indetify_by_filepath(file_path):
if (username == 'username'):
print('请设置好相关参数再测试')
else:
# Initialisation
yundama = YDMHttp(username, password, appid, appkey)
# Connectez - vous au Code Cloud 
uid = yundama.login();
print('uid: %s' % uid)
# Rechercher le solde 
balance = yundama.balance();
print('balance: %s' % balance)
# Commencez à reconnaître ,Chemin de l'image, Type de code de vérification ID,Temps mort(Secondes),Résultats de l'identification
cid, result = yundama.decode(file_path, codetype, timeout)
print('cid: %s, result: %s' % (cid, result))
return result
if __name__ == '__main__':
pass

4.Types de codes de vérification communs

4.1 urlAdresse inchangée,Le Code de vérification est inchangé

C'est un type très simple de code de vérification , L'adresse correspondante n'a besoin que d'un code de vérification , Et demande , Identifié par la plate - forme de codage

4.2 urlAdresse inchangée,Changement de code de vérification

Ce type de code de vérification est plus courant , Pour ce code de vérification , Tout le monde doit réfléchir :

Pendant la connexion , Supposons que le Code de vérification que j'ai entré soit correct , Comment le serveur opposé juge - t - il que le Code de vérification que j'ai entré est celui qui apparaît sur mon écran , Au lieu des autres codes de vérification ?

En accédant à la page web , Demander un code de vérification , Et quand le Code de vérification est soumis , Le serveur opposé a dû vérifier que le Code de vérification que j'ai obtenu précédemment et le dernier Code de vérification soumis étaient le même Code de vérification , Veuillez définir les paramètres pertinents avant le test ?

C'est évident,C'est parcookiePour y arriver., Donc la correspondance , Sur la page de demande , Demander un code de vérification , Une garantie est requise pour la soumission du Code de vérification cookieCohérence,Peut être utilisé pour celarequests.sessionC'est réglé.


Résumé

  1. Compris. Connaissance des codes de vérification
  2. Maîtrise Utilisation du moteur de reconnaissance d'image
  3. Compris. Plate - forme de codage commune
  4. Maîtrise Méthode de traitement du Code de vérification par plate - forme de codage

Allez!

Merci beaucoup.!

Un effort.!

Copyright:Cet article est[Zsyl]Établi,Veuillez apporter le lien original pour réimprimer,remercier。 https://fra.fheadline.com/2021/08/20210819222327293c.html