Maison >développement back-end >Tutoriel Python >Utilisation d'une adresse IP proxy et de stratégies anti-exploration dans le robot d'exploration Scrapy
Utilisez l'IP proxy et la stratégie anti-crawler dans Scrapy crawler
Ces dernières années, avec le développement d'Internet, de plus en plus de données doivent être obtenues via les robots d'exploration, et la stratégie anti-crawler pour les robots d'exploration est devenue de plus en plus stricte . Dans de nombreux scénarios, l’utilisation d’IP proxy et de stratégies anti-crawler sont devenues des compétences essentielles pour les développeurs de robots. Dans cet article, nous verrons comment utiliser l'IP proxy et les stratégies anti-exploration dans les robots Scrapy pour garantir la stabilité et le taux de réussite des données d'exploration.
1. Pourquoi devez-vous utiliser une IP proxy
Lorsque les robots visitent le même site Web, ils sont souvent identifiés comme la même adresse IP, qui peut facilement être bloquée ou restreinte. Pour éviter que cela ne se produise, une adresse IP proxy doit être utilisée pour masquer la véritable adresse IP, protégeant ainsi mieux l'identité du robot.
2. Comment utiliser l'IP proxy
L'utilisation de l'IP proxy dans Scrapy peut être réalisée en définissant l'attribut DOWNLOADER_MIDDLEWARES dans le fichier settings.py.
DOWNLOADER_MIDDLEWARES = { 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 1, 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None, 'your_project.middlewares.RandomUserAgentMiddleware': 400, 'your_project.middlewares.RandomProxyMiddleware': 410, }
import requests import random class RandomProxyMiddleware(object): def __init__(self, proxy_list_path): with open(proxy_list_path, 'r') as f: self.proxy_list = f.readlines() @classmethod def from_crawler(cls, crawler): settings = crawler.settings return cls(settings.get('PROXY_LIST_PATH')) def process_request(self, request, spider): proxy = random.choice(self.proxy_list).strip() request.meta['proxy'] = "http://" + proxy
Qui doit être définie dans les paramètres. py file Chemin d'accès à la liste d'adresses IP du proxy :
PROXY_LIST_PATH = 'path/to/your/proxy/list'
Lors de l'exécution de l'exploration, Scrapy sélectionnera au hasard une adresse IP de proxy pour l'accès, assurant ainsi la dissimulation de l'identité et le taux de réussite de l'exploration.
3. À propos des stratégies anti-crawler
À l'heure actuelle, les stratégies anti-crawler pour les sites Web sont très courantes, allant du simple jugement de l'agent utilisateur à des codes de vérification plus complexes et à la vérification à barre coulissante. Ci-dessous, nous verrons comment gérer plusieurs stratégies anti-exploration courantes dans les robots Scrapy.
Afin d'empêcher l'accès des robots, les sites Web déterminent souvent le champ User-Agent. Si le User-Agent n'est pas la méthode du navigateur, il sera intercepté. Par conséquent, nous devons définir un agent utilisateur aléatoire dans le robot d'exploration Scrapy pour éviter que l'agent utilisateur ne soit reconnu comme un robot d'exploration.
Sous middlewares.py, nous définissons la classe RandomUserAgentMiddleware pour implémenter la fonction User-Agent aléatoire :
import random from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware class RandomUserAgentMiddleware(UserAgentMiddleware): def __init__(self, user_agent): self.user_agent = user_agent @classmethod def from_crawler(cls, crawler): s = cls(crawler.settings.get('user_agent', 'Scrapy')) crawler.signals.connect(s.spider_closed, signal=signals.spider_closed) return s def process_request(self, request, spider): ua = random.choice(self.user_agent_list) if ua: request.headers.setdefault('User-Agent', ua)
En même temps, définissez la liste User-Agent dans le fichier settings.py :
USER_AGENT_LIST = ['Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36']
Pour éviter un grand nombre de requêtes provenant de la même adresse IP, le site Web peut restreindre ou interdire l'accès aux requêtes provenant de la même adresse IP. Dans cette situation, nous pouvons utiliser une IP proxy pour éviter les anti-crawlers IP en changeant d'adresse IP de manière aléatoire.
Les sites Web peuvent identifier l'identité de la demande en définissant des cookies et une session, etc. Ces méthodes sont souvent liées aux comptes et limiteront également la fréquence des demandes pour chaque compte. Par conséquent, nous devons simuler les cookies et la session dans le robot Scrapy pour éviter d'être identifiés comme des demandes illégales.
Dans le fichier settings.py de Scrapy, nous pouvons configurer les éléments suivants :
COOKIES_ENABLED = True COOKIES_DEBUG = True
En même temps, définir la classe CookieMiddleware dans le fichier middlewares.py pour simuler la fonction Cookies :
from scrapy.exceptions import IgnoreRequest class CookieMiddleware(object): def __init__(self, cookies): self.cookies = cookies @classmethod def from_crawler(cls, crawler): return cls( cookies=crawler.settings.getdict('COOKIES') ) def process_request(self, request, spider): request.cookies.update(self.cookies)
Parmi eux, les paramètres COOKIES sont les suivants :
COOKIES = { 'cookie1': 'value1', 'cookie2': 'value2', ... }
Les cookies doivent être ajoutés au champ cookies de la demande avant l'envoi de la demande. Si la demande ne contient pas de cookies, elle est susceptible d'être identifiée comme une demande illégale par le site Internet.
IV.Résumé
Ce qui précède est une introduction à l'utilisation des stratégies IP proxy et anti-crawler dans les robots Scrapy. L'utilisation de stratégies IP proxy et anti-crawler est un moyen important pour empêcher les robots d'exploration d'être restreints et interdits. Bien sûr, les stratégies anti-crawler émergent à l’infini, et nous devons gérer différentes stratégies anti-crawler en conséquence.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!