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)
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.
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
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é.
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.
Robots.txt …… Règle de patrouille du robot d'exploration pour chaque site Web (fichier texte) ⇒ Robots.spécifications txt|Guide du développeur de la recherche Google| Google Developers
balises meta robots, data-nosnippet, X-Robots-Tag …… Règles de patrouille basées sur la page Web (mots-clés dans la réponse) ⇒ robots metatag, data-nosnippet, spécifications X-Robots-Tag | Google Search Developer Guide
attribut rel d'une balise …… Une règle de patrouille pour chaque hyperlien d'une page Web. (Attributs de balise HTML) ⇒ Dites à Google la relation des liens externes - Aide de la Search Console
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.
À 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.
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
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)
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.
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())
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)
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.
Planificateur de tâches Windows [[Compatible Windows 10] Automatisez le travail régulier avec le planificateur de tâches (1/2): Tech TIPS- @ IT](https://www.atmarkit.co.jp/ait/articles/1305/31/news049 .html)
MacOS/Linux - cron Guide de configuration Cron
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.
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