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

Utilisation d'une adresse IP proxy et de stratégies anti-exploration dans le robot d'exploration Scrapy

PHPz
PHPzoriginal
2023-06-23 11:24:292062parcourir

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.

  1. Ajoutez le code suivant 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,
}
  1. Définissez la classe RandomProxyMiddleware dans le fichier middlewares.py pour implémenter la fonction IP proxy aléatoire :
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.

  1. Anti-crawler User-Agent

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']
  1. IP anti-crawler

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.

  1. Cookies et anti-crawler de session

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn