[PYTHON] [Version 2020] Procédure de développement du robot personnel et ses précautions

introduction

Le but de cet article est d'aider toute personne intéressée par l'automatisation de la collecte de contenu Web à développer le robot d'exploration idéal. À cette fin, voici 12 étapes pour développer un robot d'exploration. Un robot d'exploration est un programme automatisé qui explore les sites Web, enregistre et collecte le contenu. Parmi eux, je pense que le robot d'exploration idéal est celui qui respecte la loi et l'éthique de chaque personne et n'interfère pas avec le fonctionnement du site Web cible. Un robot d'exploration non idéal se verra refuser l'accès à partir du site Web ou sera forcé de passer à un écran d'erreur. Laissez votre ordinateur faire le travail fastidieux, évitez les problèmes et augmentez votre temps disponible.

■ Site de référence (site d'introduction Python)

01. Le but de la collecte de contenu est soit «d'utiliser entre des individus ou des familles», «fournir un service de recherche sur le Web» ou «analyser des informations».

Tout le contenu Web est le travail de quelqu'un d'autre. Par conséquent, il est soumis à la loi sur les droits d'auteur. Selon la loi sur le droit d'auteur, les objectifs suivants sont pour l'utilisation gratuite de l'œuvre.

■ Site de référence

En particulier, ces deux derniers sont devenus plus légaux dans la loi révisée de 2018 sur le droit d'auteur. Les restrictions ont également été clarifiées, veuillez donc vérifier les détails.

■ Site de référence

Cependant, même à ces fins, les points suivants doivent être notés en commun.

02. Le site Web cible doit contenir un contenu juridique.

Il est interdit de télécharger du contenu téléchargé illégalement tout en le reconnaissant comme illégal. Révision de la loi sur le droit d'auteur (entrée en vigueur le 1er janvier 1991), le type de contenu (ex. Texte, image , Audio, vidéo) n'a pas d'importance. Il est fortement recommandé de cibler les sites Web pour lesquels l'auteur a accepté de fournir le contenu.

■ Site de référence

03. Lorsque vous ciblez du contenu pour les membres d'un site Web, suivez les conditions d'utilisation de ce site Web.

Si vous acceptez les conditions d'utilisation pour devenir membre du site Web, vous devez vous conformer à ces conditions d'utilisation. Si un robot d'exploration est interdit dans les conditions d'utilisation, le site Web ne peut pas être exploré.

04. Si le site Web donne des instructions au robot d'exploration, suivez les instructions.

Un site Web peut demander au robot d'exploration de travailler pour l'ensemble du site Web, pour une page Web spécifiée ou pour un élément d'écran spécifique. Il existe les instructions suivantes et vous devez les suivre.

05. Il n'est pas recommandé de masquer l'adresse IP de la source de connexion dans un VPN ou un serveur proxy.

L'adresse IP de la source de connexion est enregistrée sur le site Web de la destination de connexion et peut être utilisée pour le blocage d'accès ou l'identification. Pour éviter cela, vous pouvez utiliser un VPN ou un serveur proxy (un service qui met un intermédiaire entre la destination de la connexion et la source de la connexion) pour masquer l'adresse IP de la source de connexion. (Pour être exact, l'adresse IP de l'intermédiaire est notifiée à la destination de la connexion) Cependant, certains sites Web peuvent bloquer l'accès des VPN et des serveurs proxy. De plus, toutes les communications étant confiées à un intermédiaire, l'utilisation de services peu fiables peut entraîner des fuites d'informations. Et comme l'accès ne peut pas être bloqué par l'adresse IP du côté du site Web, il y a une forte possibilité que des mesures de plus haut niveau soient prises.

06. Utilisez l'outil d'opération automatique du navigateur "Selenium" comme robot d'exploration.

À partir de là, nous parlerons du développement de robots spécifiques. De nombreux sites Web supposent un traitement Javascript avant l'affichage des informations. Afin d'obtenir les informations après le traitement, laissez le navigateur (pour être exact, le moteur de rendu) les traiter. Par conséquent, il est recommandé d'utiliser l'outil de fonctionnement automatique du navigateur "Selenium" en tant que robot d'exploration. Le site suivant a été très utile pour la procédure d'installation et le fonctionnement de base de Selenium.

[Version complète] Cheet sheet qui exploite automatiquement (crawling / scraping) le navigateur avec Python et Selenium | Tanuhack

L'auteur utilise Firefox comme navigateur cible, mais veuillez utiliser ce que vous voulez, en particulier Google Chrome ou Microsoft Edge. Dans cet article, nous vous expliquerons sur l'hypothèse de Firefox.

Page de téléchargement de Firefox

Page de téléchargement du pilote Web Firefox

Il est possible d'effectuer le traitement en arrière-plan (réglage sans tête), mais il est recommandé d'afficher l'écran au début. Parfois, il échoue en raison de la transition d'écran, et parfois il n'est pas possible d'obtenir l'élément d'écran spécifié. De plus, en raison du renouvellement du site Web, il peut être nécessaire de le rénover complètement.

Démarrez Firefox


from selenium import webdriver
from selenium.webdriver.firefox.options import Options

#Options de réglage
options = Options()
#options.set_headless() #Si vous souhaitez masquer l'écran, supprimez les commentaires.

#Lancer le navigateur
driver = webdriver.Firefox(executable_path='Chemin Firefox WebDriver (ex.~/geckodriver)', options=options)

#Réglage du temps d'attente
driver.implicitly_wait(5) #Temps d'attente maximum pour l'affichage des éléments d'écran
driver.set_page_load_timeout(180) #Temps d'attente maximum jusqu'à l'affichage de l'écran

07. Accès avec le cookie du service Web cible.

La plupart des services Web émettent un cookie dans le navigateur de chaque visiteur et utilisent ce cookie pour gérer le visiteur. Et comme la plupart des robots d'exploration accèdent dès la première visite (sans cookies), la possibilité d'être traité comme un utilisateur général augmente simplement en ayant des cookies. Créez un nouveau profil (informations utilisateur du navigateur) dans votre navigateur et accédez manuellement au site Web cible.

Après cela, en spécifiant le chemin du profil précédent dans Selenium, vous pouvez déplacer le robot en état de revisiter (avec des cookies). Les profils Firefox sont stockés dans des dossiers à l'emplacement suivant, et s'il existe plusieurs profils, vous pouvez déterminer le profil nouvellement créé par la date et l'heure de mise à jour. C: / Users / username / AppData / Roaming / Mozilla / Firefox / Profiles /

Définir le profil


#Lancer le navigateur
profiler = webdriver.FirefoxProfile('Chemin du profil Firefox (ex.~/Firefox/Profiles/FOLDER-NAME)')
driver = webdriver.Firefox(executable_path='Chemin du pilote Web Firefox', options=options, firefox_profile=profiler)

08. Pour passer à n'importe quelle autre page du même site, réécrivez l'URL du lien hypertexte et cliquez dessus.

Selenium propose des commandes pour les transitions d'écran et utilise les commandes suivantes lors de la transition vers le site Web cible. Cette commande revient à saisir l'URL directement dans le champ URL du navigateur et à passer à l'écran.

Transition vers une autre page du site


driver.get('Toute URL')

Pour vous déplacer dans le même site, utilisez une commande qui imite l'opération normale consistant à cliquer sur un lien hypertexte ou un bouton.

Transition vers une autre page du même site


#Obtenir un lien hypertexte
link = driver.find_element_by_css_selector('Sélecteur CSS')
#Cliquez sur l'élément précédent
link.click()

Cependant, vous souhaiterez peut-être passer à n'importe quelle page, même au sein du même site. (Ex. Après avoir acquis le contenu de l'écran de détail du produit A, le lien du produit B est présenté comme le produit associé et l'écran passe à l'écran de détail du produit B) Dans ce cas, réécrivez l'URL de destination de la transition avec un lien hypertexte ou un bouton avec Javascript, et effectuez la transition en cliquant sur l'élément.

Réécrivez l'URL du lien hypertexte et passez à une autre page du même site


#Obtenir un lien hypertexte
link = driver.find_element_by_css_selector('Sélecteur CSS')
#Faites défiler jusqu'à la position où l'élément précédent peut être vu à l'écran
driver.execute_script("arguments[0].scrollIntoView()", link)
#Réécrire l'URL de destination de la transition de l'élément précédent vers une URL arbitraire
driver.execute_script("arguments[0].setAttribute('href','{}')".format('Toute URL'), link)
#Cliquez sur l'élément précédent
link.click()

Cela permet d'éviter les comportements non naturels tels que la saisie de l'URL directement dans le champ URL et la transition même si la transition se trouve sur le même site. Techniquement parlant, le but est de faire une transition tout en soulevant un événement de clic Javascript avec le référent (URL source de transition d'écran) du même ensemble de domaines.

09. Après la transition d'écran, attendez une seconde au hasard.

Après la transition d'écran, ajoutez un processus pour attendre une seconde aléatoire. Il ne s'agit pas seulement de réduire la charge sur le site Web, mais également d'éviter les problèmes de transition d'écran. En fonction du temps d'attente après la transition d'écran, il y avait un problème que la transition d'écran ne pouvait pas être effectuée normalement car elle était opérée avant le traitement avec Javascript. Je pense que c'est une bonne idée de modifier ce temps d'attente en fonction du site Web.

Attendez des secondes aléatoires


from time import sleep
import random

def get_wait_secs():
  """Obtenez l'écran, attendez quelques secondes"""
  max_wait = 7.0   #Secondes d'attente maximum
  min_wait = 3.0   #Secondes d'attente minimum
  mean_wait = 5.0  #Secondes d'attente moyennes
  sigma_wait = 1.0 #Écart type (largeur de flou)
  return min([max_wait, max([min_wait, round(random.normalvariate(mean_wait, sigma_wait))])])

sleep(get_wait_secs())

10. Lors du téléchargement du fichier, attachez l'agent utilisateur et le référent à la demande.

Le téléchargement de fichiers, en particulier de fichiers image, peut avoir les restrictions ci-dessus définies pour éviter les liens directs et les téléchargements chaotiques. Lors du fonctionnement normal du navigateur, l'agent utilisateur (informations sur le système d'exploitation de la source de connexion, le navigateur, etc.) et le référent (URL de la source de transition d'écran) sont définis automatiquement.

Télécharger le fichier image


import requests
import shutil

img = driver.find_element_by_css_selector('Sélecteur CSS vers la balise img')
src = img.get_attribute('src')
r = requests.get(src, stream=True, headers={'User-Agent':'Agent utilisateur' , 'Referer':driver.current_url})
if r.status_code == 200:
  with open('Chemin de destination de l'enregistrement d'écran', 'wb') as f:
    r.raw.decode_content = True
    shutil.copyfileobj(r.raw, f)

11. Rendez l'heure de démarrage du robot irrégulier. En outre, le temps de démarrage à un moment donné devrait être d'environ plusieurs heures.

Vous pouvez démarrer le robot d'exploration manuellement, mais vous pouvez également le démarrer régulièrement sur rendez-vous. Les outils suivants sont fournis en standard, selon le système d'exploitation.

Cependant, si vous continuez à accéder au site Web exactement au même moment, la charge sur le site Web sera concentrée à ce moment-là, il est donc recommandé de préparer une certaine fluctuation du temps d'accès. Une façon de faire est de démarrer la réservation, puis de l'arrêter pendant un temps aléatoire en utilisant la même procédure qu'en 08.

De plus, étant donné que l'accès pendant plus de quelques heures est le même, il est recommandé d'ajouter un processus pour arrêter le robot après avoir continué à accéder dans une certaine mesure.

12. Ajoutez des règles opérationnelles de robot avec votre éthique.

En plus de ce qui précède, si vous trouvez une règle de fonctionnement qui n'interfère pas avec le fonctionnement du site Web cible, nous la présenterons. Merci d'utiliser le site Web.

(Au 6 septembre 2020)

Recommended Posts

[Version 2020] Procédure de développement du robot personnel et ses précautions
Procédure d'installation pour Python et Ansible avec une version spécifique
Précautions à prendre lors de la manipulation des images png et jpg
6 bibliothèques Python pour un développement et un débogage plus rapides
Feuille de route et documents de référence pour l'auto-apprentissage du développement Web
Précautions concernant cv2.cvtcolor
J'ai essayé pipenv et asdf pour le contrôle de version Python
Meilleures pratiques personnelles pour l'environnement de développement Python basé sur VS Code