Erledigt!

Können Sie einen Python-Code zum Scrapen von Informationen aus URLs für bestimmte Datenpunkte freigeben und in einer Datenbank speichern? Können Sie den Workflow des Codes auf alle 12 Stunden automatisieren und nur den Inhalt in der Datenbank ersetzen, der sich in Ihrem Scraping-Crawl-Zyklus geändert hat?

Technologie
Informatik
Automatisierung
Datenbank
Web-Scraping

Fortschritt

6 Schritte abgeschlossen!13,29 Sek.

Antwort

Im Folgenden finden Sie einen Python-Codeausschnitt, der zeigt, wie Sie Daten aus einer URL abrufen, in einer SQLite-Datenbank speichern und den Workflow so automatisieren, dass er alle 12 Stunden ausgeführt wird. Der Code ersetzt nur die Daten, die sich seit dem letzten Scraping geändert haben.

Sie müssen die erforderlichen Bibliotheken mit pip installieren, falls Sie dies noch nicht getan haben:

pip install requests beautifulsoup4 sqlite3 apscheduler

Code-Übersicht

  1. Scraping der URL für bestimmte Datenpunkte: Im Beispiel wird eine generische URL gescrapt. Sie können die Funktion scrape_data ändern, um die spezifischen Datenpunkte zu extrahieren, die Sie benötigen.

  2. Speichern in SQLite-Datenbank: Dieser Code verwendet SQLite, um die gescrapten Daten zu speichern.

  3. Automatisieren mit APScheduler: Die APScheduler-Bibliothek wird verwendet, um die Scraping-Aufgabe alle 12 Stunden zu planen.

Python-Code

import requests from bs4 import BeautifulSoup import sqlite3 from apscheduler.schedulers.blocking import BlockingScheduler import hashlib # Database setup def create_table(): conn = sqlite3.connect('scraping_data.db') cursor = conn.cursor() cursor.execute(''' CREATE TABLE IF NOT EXISTS scraped_data ( id INTEGER PRIMARY KEY, data_hash TEXT, content TEXT ) ''') conn.commit() conn.close() # Scraping function def scrape_data(url): response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') # Adjust the following line to scrape the specific data points you need content = soup.find('div', class_='specific-class').text.strip() # Example of scraping a specific div data_hash = hashlib.md5(content.encode()).hexdigest() # Create a hash of the content return data_hash, content # Function to insert or update data in the database def save_to_database(url): data_hash, content = scrape_data(url) conn = sqlite3.connect('scraping_data.db') cursor = conn.cursor() # Check if the content has changed cursor.execute('SELECT * FROM scraped_data WHERE data_hash = ?', (data_hash,)) result = cursor.fetchone() if result is None: # If not present, insert new record cursor.execute('INSERT INTO scraped_data (data_hash, content) VALUES (?, ?)', (data_hash, content)) print("New content saved to database.") else: print("Content has not changed. No update needed.") conn.commit() conn.close() # Function to run the scraper def run_scraper(): url = 'http://example.com' # Replace with the URL you want to scrape save_to_database(url) # Scheduler setup if __name__ == '__main__': create_table() scheduler = BlockingScheduler() scheduler.add_job(run_scraper, 'interval', hours=12) # Run every 12 hours run_scraper() # Initial run scheduler.start()

Erklärung

  • Data Scraping: Die Funktion scrape_data sendet eine HTTP-Anfrage an die angegebene URL und verwendet BeautifulSoup, um den HTML-Code zu analysieren und den gewünschten Inhalt zu extrahieren.

  • Datenbankverwaltung: Die Funktion save_to_database prüft, ob der Inhalt bereits mit einem Hash gespeichert wurde. Wenn sie sich geändert hat (d. h. ein neuer Hash generiert wird), wird die Datenbank aktualisiert.

  • Planung: APScheduler ist so konfiguriert, dass run_scraper() alle 12 Stunden ausgeführt wird. Der erste Lauf wird direkt vor dem Start des Schedulers aufgerufen.

Anmerkungen

  • Ersetzen Sie http://example.com und die Scraping-Logik durch die tatsächliche URL und die Datenextraktionslogik gemäß Ihren Anforderungen.
  • Stellen Sie sicher, dass die HTML-Struktur der Webseite, die Sie scrapen, für die Tags und Klassen geeignet ist, die Sie im Code verwenden.
  • Behandeln Sie Fehler und Grenzfälle (z. B. Anforderungsfehler, Änderungen im Webseitenlayout), die für die Robustheit erforderlich sind.