Voltooid!

kun je een python-code delen voor het schrapen van informatie van URL's voor specifieke datapunten en opslaan in een database. Kunt u de workflow van de code automatiseren tot elke 12 uur en alleen de inhoud in de database vervangen die is gewijzigd in uw scraping crawl-cyclus.

Technologie
Informatica
Automatisering
Databank
Web schrapen

Voortgang

6 stappen uitgevoerd!13,29 sec

Antwoord

Hier is een Python-codefragment dat laat zien hoe u gegevens van een URL kunt schrapen, deze kunt opslaan in een SQLite-database en de workflow kunt automatiseren die elke 12 uur moet worden uitgevoerd. De code vervangt alleen de gegevens die zijn gewijzigd sinds de laatste scraping.

U moet de vereiste bibliotheken installeren met pip als u dat nog niet hebt gedaan:

pip install requests beautifulsoup4 sqlite3 apscheduler

Code Overzicht

  1. De URL schrapen voor specifieke gegevenspunten: In het voorbeeld wordt een algemene URL geschraapt. U kunt de functie scrape_data wijzigen om de specifieke gegevenspunten te extraheren die u nodig hebt.

  2. Opslaan in SQLite Database: Deze code gebruikt SQLite om de geschraapte gegevens op te slaan.

  3. Automatiseren met APScheduler: De APScheduler-bibliotheek wordt gebruikt om de scraping-taak elke 12 uur in te plannen.

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()

Uitleg

  • Data Scraping: De scrape_data functie stuurt een HTTP-verzoek naar de opgegeven URL en gebruikt BeautifulSoup om de HTML te parseren en de gewenste inhoud te extraheren.

  • Databasebeheer: De functie save_to_database controleert of de inhoud al is opgeslagen met behulp van een hash. Als het is gewijzigd (d.w.z. er wordt een nieuwe hash gegenereerd), wordt de database bijgewerkt.

  • Planning: APScheduler is geconfigureerd om elke 12 uur run_scraper() uit te voeren. De eerste uitvoering wordt vlak voor het starten van de planner aangeroepen.

Opmerkingen

  • Vervang http://example.com en de scraping-logica door de daadwerkelijke URL en gegevensextractielogica volgens uw vereisten.
  • Zorg ervoor dat de HTML-structuur van de webpagina die u scrapt geschikt is voor de tags en klassen die u in de code gebruikt.
  • Fouten en randgevallen (bijv. mislukte aanvragen, wijzigingen in de lay-out van webpagina's) afhandelen zoals vereist voor robuustheid.