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.
Voortgang
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
-
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. -
Opslaan in SQLite Database: Deze code gebruikt SQLite om de geschraapte gegevens op te slaan.
-
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.
Suggesties
- Welke specifieke datapunten wilt u uit de URL halen?
- Hoe zou u omgaan met fouten en randgevallen in het schrapproces?
- Kunt u uitleggen wat het doel is van het gebruik van een hash om te controleren op wijzigingen in de inhoud?
- Heeft u tijdens het scrapen rekening gehouden met mogelijke uitdagingen met de HTML-structuur van de webpagina?
- Welke andere taken of processen kunnen baat hebben bij automatisering in uw workflow?