Verwenden Sie Proxy-IP und Anti-Crawler-Strategie im Scrapy-Crawler.
Mit der Entwicklung des Internets müssen in den letzten Jahren immer mehr Daten über Crawler abgerufen werden, und die Anti-Crawler-Strategie für Crawler ist immer strenger geworden . In vielen Szenarien sind die Verwendung von Proxy-IP- und Anti-Crawler-Strategien zu wesentlichen Fähigkeiten für Crawler-Entwickler geworden. In diesem Artikel besprechen wir, wie Proxy-IP- und Anti-Crawling-Strategien in Scrapy-Crawlern verwendet werden, um die Stabilität und Erfolgsrate beim Crawlen von Daten sicherzustellen.
1. Warum Sie Proxy-IP verwenden müssen
Wenn Crawler dieselbe Website besuchen, werden sie häufig mit derselben IP-Adresse identifiziert, die leicht blockiert oder eingeschränkt werden kann. Um dies zu verhindern, muss eine Proxy-IP verwendet werden, um die tatsächliche IP-Adresse zu verbergen und so die Identität des Crawlers besser zu schützen.
2. So verwenden Sie Proxy-IP
Die Verwendung von Proxy-IP in Scrapy kann durch Festlegen des Attributs DOWNLOADER_MIDDLEWARES in der Datei „settings.py“ erreicht werden. py-Datei Pfad zur Proxy-IP-Liste:
DOWNLOADER_MIDDLEWARES = { 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 1, 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None, 'your_project.middlewares.RandomUserAgentMiddleware': 400, 'your_project.middlewares.RandomProxyMiddleware': 410, }
Um den Crawler-Zugriff zu verhindern, ermitteln Websites häufig das User-Agent-Feld. Wenn der User-Agent nicht die Methode des Browsers ist, wird er abgefangen. Daher müssen wir im Scrapy-Crawler einen zufälligen User-Agent festlegen, um zu verhindern, dass der User-Agent als Crawler erkannt wird.
Unter middlewares.py definieren wir die RandomUserAgentMiddleware-Klasse, um die zufällige User-Agent-Funktion zu implementieren:
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
Gleichzeitig legen wir die User-Agent-Liste in der Datei „settings.py“ fest:
PROXY_LIST_PATH = 'path/to/your/proxy/list'
Um eine große Anzahl von Anfragen von derselben IP-Adresse zu verhindern, kann die Website den Zugriff auf Anfragen von derselben IP-Adresse einschränken oder verbieten. In dieser Situation können wir Proxy-IP verwenden, um IP-Anti-Crawler durch zufälliges Wechseln der IP-Adressen zu vermeiden.
Cookies und Session Anti-Crawlerimport 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)
Gleichzeitig definieren Sie die CookieMiddleware-Klasse in der Datei middlewares.py, um die Cookies-Funktion zu simulieren:
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']
COOKIES_ENABLED = True COOKIES_DEBUG = True
IV. Zusammenfassung
Das Obige ist eine Einführung in die Verwendung von Proxy-IP- und Anti-Crawler-Strategien in Scrapy-Crawlern. Die Verwendung von Proxy-IP- und Anti-Crawler-Strategien ist ein wichtiges Mittel, um zu verhindern, dass Crawler eingeschränkt werden. Natürlich tauchen immer wieder Anti-Crawler-Strategien auf, und wir müssen uns entsprechend mit unterschiedlichen Anti-Crawler-Strategien befassen.
Das obige ist der detaillierte Inhalt vonVerwendung von Proxy-IP- und Anti-Crawling-Strategien im Scrapy-Crawler. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!