Heim  >  Artikel  >  Datenbank  >  Erstellen Sie einen einfachen Webcrawler mit Redis und JavaScript: So crawlen Sie Daten schnell

Erstellen Sie einen einfachen Webcrawler mit Redis und JavaScript: So crawlen Sie Daten schnell

WBOY
WBOYOriginal
2023-07-30 08:37:181301Durchsuche

Erstellen Sie einen einfachen Webcrawler mit Redis und JavaScript: So crawlen Sie schnell Daten

Einführung:
Ein Webcrawler ist ein Programmtool, das Informationen aus dem Internet abruft. Es kann automatisch auf Webseiten zugreifen und die darin enthaltenen Daten analysieren. Mithilfe von Webcrawlern können wir große Datenmengen schnell crawlen, um Datenanalysen und Geschäftsentscheidungen zu unterstützen. In diesem Artikel wird erläutert, wie Sie mit Redis und JavaScript einen einfachen Webcrawler erstellen und wie Sie Daten schnell crawlen.

  1. Umgebungsvorbereitung
    Bevor wir beginnen, müssen wir die folgende Umgebung vorbereiten:
  2. Redis: Wird als Aufgabenplaner und Datenspeicher des Crawlers verwendet.
  3. Node.js: JavaScript-Code ausführen.
  4. Cheerio: Eine Bibliothek zum Parsen von HTML-Seiten.
  5. Crawler-Architekturdesign
    Unser Crawler übernimmt eine verteilte Architektur und ist in zwei Teile unterteilt: Taskplaner und Crawler-Knoten.
  • Aufgabenplaner: Verantwortlich für das Hinzufügen von URLs, die gecrawlt werden sollen, zur Redis-Warteschlange und für die Durchführung von Deduplizierung und Prioritätseinstellungen nach Bedarf.
  • Crawler-Knoten: Verantwortlich für das Abrufen der zu crawlenden URL aus der Redis-Warteschlange, das Parsen der Seite, das Extrahieren von Daten und das Speichern in Redis.
  1. Codebeispiel für den Aufgabenplaner
    Das Codebeispiel des Aufgabenplaners lautet wie folgt:
const redis = require('redis');
const client = redis.createClient();

// 添加待抓取的URL到队列
const enqueueUrl = (url, priority = 0) => {
  client.zadd('urls', priority, url);
}

// 从队列中获取待抓取的URL
const dequeueUrl = () => {
  return new Promise((resolve, reject) => {
    client.zrange('urls', 0, 0, (err, urls) => {
      if (err) reject(err);
      else resolve(urls[0]);
    })
  })
}

// 判断URL是否已经被抓取过
const isUrlVisited = (url) => {
  return new Promise((resolve, reject) => {
    client.sismember('visited_urls', url, (err, result) => {
      if (err) reject(err);
      else resolve(!!result);
    })
  })
}

// 将URL标记为已经被抓取过
const markUrlVisited = (url) => {
  client.sadd('visited_urls', url);
}

Im obigen Code verwenden wir die geordnete Sammlung und die Sammlungsdatenstruktur von Redis, geordnete Sammlung urls code> ist Wird zum Speichern von zu crawlenden URLs verwendet, und die Sammlung <code>visited_urls wird zum Speichern von gecrawlten URLs verwendet. urls用于存储待抓取的URL,集合visited_urls用于存储已经被抓取过的URL。

  1. 爬虫节点代码示例
    爬虫节点的代码示例如下:
const request = require('request');
const cheerio = require('cheerio');

// 从指定的URL中解析数据
const parseData = (url) => {
  return new Promise((resolve, reject) => {
    request(url, (error, response, body) => {
      if (error) reject(error);
      else {
        const $ = cheerio.load(body);
        // 在这里对页面进行解析,并提取数据
        // ...

        resolve(data);
      }
    })
  })
}

// 爬虫节点的主逻辑
const crawler = async () => {
  while (true) {
    const url = await dequeueUrl();
    if (!url) break;

    if (await isUrlVisited(url)) continue;

    try {
      const data = await parseData(url);

      // 在这里将数据存储到Redis中
      // ...

      markUrlVisited(url);
    } catch (error) {
      console.error(`Failed to parse data from ${url}`, error);
    }
  }
}

crawler();

在上面的代码中,我们使用了request库发送HTTP请求,使用cheerio库解析页面。在parseData函数中,我们可以根据具体的页面结构和数据提取需求,使用cheerio

    Crawler-Knoten-Codebeispiel

    Das Codebeispiel des Crawler-Knotens lautet wie folgt:

    rrreee🎜Im obigen Code verwenden wir die request-Bibliothek zum Senden von HTTP Anfragen, verwenden cheerio-Bibliothek analysiert die Seite. In der Funktion parseData können wir die Bibliothek cheerio verwenden, um die Seite zu analysieren und Daten entsprechend der spezifischen Seitenstruktur und Datenextraktionsanforderungen zu extrahieren. In der Hauptlogik des Crawler-Knotens führen wir eine Schleife durch, um die zu crawlende URL aus der Redis-Warteschlange abzurufen und die Seitenanalyse und Datenspeicherung durchzuführen. 🎜🎜Zusammenfassung: 🎜Durch die Nutzung von Redis und JavaScript können wir einen einfachen, aber leistungsstarken Webcrawler erstellen, um schnell große Datenmengen zu crawlen. Wir können den Taskplaner verwenden, um die zu crawlende URL zur Redis-Warteschlange hinzuzufügen und die URL aus der Warteschlange im Crawler-Knoten für die Seitenanalyse und Datenspeicherung abzurufen. Diese verteilte Architektur kann die Crawling-Effizienz verbessern und durch die Datenspeicherung und Hochleistungsfunktionen von Redis können große Datenmengen problemlos verarbeitet werden. 🎜

Das obige ist der detaillierte Inhalt vonErstellen Sie einen einfachen Webcrawler mit Redis und JavaScript: So crawlen Sie Daten schnell. 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