Heim  >  Artikel  >  Backend-Entwicklung  >  Eingehende Analyse der Eigenschaften und Vorteile des Scrapy-Frameworks

Eingehende Analyse der Eigenschaften und Vorteile des Scrapy-Frameworks

王林
王林Original
2024-01-19 09:11:051130Durchsuche

Eingehende Analyse der Eigenschaften und Vorteile des Scrapy-Frameworks

Das Scrapy-Framework ist ein Open-Source-Python-Crawler-Framework, mit dem Anwendungen erstellt und verwaltet werden können, die Daten crawlen. Es ist eines der derzeit beliebtesten Crawler-Frameworks auf dem Markt. Das Scrapy-Framework verwendet asynchrone E/A für Netzwerkanforderungen, wodurch Website-Daten effizient erfasst werden können und die Vorteile von Skalierbarkeit und Stabilität bestehen.

In diesem Artikel werden die Eigenschaften und Vorteile des Scrapy-Frameworks eingehend analysiert und sein effizienter und stabiler Betrieb anhand spezifischer Codebeispiele veranschaulicht.

  1. Einfach und leicht zu erlernen

Das Scrapy-Framework verwendet die Python-Sprache, die leicht zu erlernen ist und eine niedrige Einstiegshürde aufweist. Gleichzeitig bietet es auch eine vollständige Dokumentation und Beispielcode, um Benutzern einen schnellen Einstieg zu erleichtern. Das Folgende ist ein einfaches Scrapy-Crawler-Beispiel, mit dem Sie die Titel und Links beliebter Fragen zu Zhihu abrufen können:

import scrapy

class ZhihuSpider(scrapy.Spider):
    name = "zhihu" # 爬虫名
    start_urls = [
         'https://www.zhihu.com/hot'
    ] # 起始网站链接

    def parse(self, response):
        for question in response.css('.HotItem'):
            yield {
                'title': question.css('h2::text').get(),
                'link': question.css('a::attr(href)').get()
            }

Im obigen Code wird ein Crawler-Programm mit dem Namen „zhihu“ durch Erben der Klasse scrapy.Spider definiert. Das Attribut start_urls wird in der Klasse definiert und die zu crawlenden Website-Links werden in einer Liste angegeben. Eine parse()-Methode ist definiert, um die Antwort zu analysieren, die Titel und Links beliebter Fragen über CSS-Selektoren abzurufen und die Ergebnisse als Wörterbuchausbeute zurückzugeben.

  1. Asynchrones IO

Das Scrapy-Framework verwendet asynchrones IO für Netzwerkanfragen. Es kann mehrere asynchrone Anfragen gleichzeitig senden und alle Antworten sofort zurückgeben. Diese Methode verbessert die Geschwindigkeit und Effizienz des Crawlers erheblich. Das Folgende ist ein einfaches Beispiel für einen asynchronen Scrapy-Anforderungscode:

import asyncio
import aiohttp

async def fetch(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            return await response.text()

async def main():
    urls = [
        'https://www.baidu.com',
        'https://www.google.com',
        'https://www.bing.com'
    ]
    tasks = []
    for url in urls:
        tasks.append(asyncio.ensure_future(fetch(url)))
    responses = await asyncio.gather(*tasks)
    print(responses)

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

Im obigen Code wird die asynchrone Anforderungsmethode über die asyncio-Bibliothek und die aiohttp-Bibliothek implementiert. Zum Senden von Anforderungen ist eine asynchrone Funktion fetch() definiert, und die aiohttp-Bibliothek wird zum Implementieren eines asynchronen HTTP-Clients verwendet. Eine asynchrone Funktion main() wird zum Verarbeiten von URLs definiert, das von fetch() zurückgegebene Future-Objekt wird zur Aufgabenliste hinzugefügt und schließlich wird die Funktion asyncio.gather() verwendet, um die Rückgabeergebnisse aller Aufgaben abzurufen.

  1. Erweiterbarkeit

Das Scrapy-Framework bietet einen umfangreichen Satz an Erweiterungsschnittstellen und Plug-ins. Benutzer können problemlos benutzerdefinierte Middleware, Pipelines, Downloader usw. hinzufügen, um seine Funktionalität und Leistung zu erweitern. Das Folgende ist ein Beispiel für eine einfache Scrapy-Middleware:

from scrapy import signals

class MyMiddleware:
    @classmethod
    def from_crawler(cls, crawler):
        o = cls()
        crawler.signals.connect(o.spider_opened, signal=signals.spider_opened)
        crawler.signals.connect(o.spider_closed, signal=signals.spider_closed)
        return o

    def spider_opened(self, spider):
        spider.logger.info('常规中间件打开: %s', spider.name)

    def spider_closed(self, spider):
        spider.logger.info('常规中间件关闭: %s', spider.name)

    def process_request(self, request, spider):
        spider.logger.info('常规中间件请求: %s %s', request.method, request.url)
        return None

    def process_response(self, request, response, spider):
        spider.logger.info('常规中间件响应: %s %s', str(response.status), response.url)
        return response

    def process_exception(self, request, exception, spider):
        spider.logger.error('常规中间件异常: %s %s', exception, request.url)
        return None

Im obigen Code ist eine MyMiddleware-Middleware-Klasse definiert. In der Klasse ist eine spezielle Funktion from_crawler() definiert, die die Signalverbindung des Crawler-Programms verarbeitet. Die Funktionen „spider_opened()“ und „spider_closed()“ sind für die Verarbeitung der Öffnungs- und Schließsignale des Crawlers definiert. Die Funktionen „process_request()“ und „process_response()“ sind für die Verarbeitung von Anforderungs- und Antwortsignalen definiert. Die Funktion „process_Exception()“ ist für die Verarbeitung von Ausnahmeinformationen definiert.

  1. Stabilität

Das Scrapy-Framework ist hochgradig konfigurierbar und anpassbar und kann die Crawler-Details an die Benutzeranforderungen anpassen, wodurch die Stabilität und Robustheit des Scrapy-Framework-Crawlers verbessert wird. Das Folgende ist ein Beispiel für die Scrapy-Download-Verzögerung und die Timeout-Konfiguration:

DOWNLOAD_DELAY = 3
DOWNLOAD_TIMEOUT = 5

Wenn Sie im obigen Code den Parameter DOWNLOAD_DELAY auf 3 setzen, bedeutet dies, dass Sie zwischen jeweils zwei Downloads 3 Sekunden warten müssen. Wenn Sie den Parameter DOWNLOAD_TIMEOUT auf 5 setzen, bedeutet dies, dass es zu einer Zeitüberschreitung kommt und beendet wird, wenn innerhalb von 5 Sekunden keine Antwort empfangen wird.

Zusammenfassung

Das Scrapy-Framework ist ein effizientes, skalierbares und stabiles Python-Crawler-Framework mit den Vorteilen von einfachem Lernen, asynchroner E/A, Skalierbarkeit und Stabilität. In diesem Artikel werden die Hauptfunktionen und Vorteile des Scrapy-Frameworks anhand konkreter Codebeispiele vorgestellt. Für Benutzer, die effiziente und stabile Crawler-Anwendungen entwickeln möchten, ist das Scrapy-Framework zweifellos eine gute Wahl.

Das obige ist der detaillierte Inhalt vonEingehende Analyse der Eigenschaften und Vorteile des Scrapy-Frameworks. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn