paint-brush
Lassen Sie uns ein kostenloses Web Scraping Tool erstellen, das Proxys und KI zur Datenanalyse kombiniertvon@aviatorscode2
Neue Geschichte

Lassen Sie uns ein kostenloses Web Scraping Tool erstellen, das Proxys und KI zur Datenanalyse kombiniert

von Victor Yakubu15m2024/12/17
Read on Terminal Reader

Zu lang; Lesen

Erfahren Sie, wie Sie Web Scraping, Proxys und KI-gestützte Sprachmodelle kombinieren, um die Datenextraktion zu automatisieren und mühelos umsetzbare Erkenntnisse zu gewinnen.
featured image - Lassen Sie uns ein kostenloses Web Scraping Tool erstellen, das Proxys und KI zur Datenanalyse kombiniert
Victor Yakubu HackerNoon profile picture
0-item
1-item
2-item

Während einige Websites einfach mit Selenium, Puppeteer und dergleichen zu scrapen sind, können sich andere Websites, die erweiterte Sicherheitsmaßnahmen wie CAPTCHAs und IP-Sperren implementieren, als schwierig erweisen. Um diese Herausforderungen zu meistern und sicherzustellen, dass Sie 99 % der Websites kostenlos mit dem Scraper scrapen können, werden Sie dies in diesem Artikel erstellen und einen Proxy-Tool in Ihrem Code, der dabei hilft, diese Sicherheitsmaßnahmen zu umgehen.


Das Sammeln der Daten ist jedoch nur ein Schritt; was Sie mit diesen Daten machen, ist ebenso wichtig, wenn nicht sogar noch wichtiger. Oftmals müssen hierfür große Mengen an Informationen mühsam manuell durchgesehen werden. Aber was wäre, wenn Sie diesen Prozess automatisieren könnten? Durch die Nutzung eines Sprachmodells (LLM) können Sie nicht nur Daten sammeln, sondern diese auch abfragen, um aussagekräftige Erkenntnisse zu gewinnen – und so Zeit und Mühe sparen.


In diesem Leitfaden erfahren Sie, wie Sie Web Scraping mit KI kombinieren, um kostenlos ein leistungsstarkes Tool zum Sammeln und Analysieren von Daten in großem Umfang zu erstellen. Tauchen Sie ein!

Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass Sie über Folgendes verfügen:

  1. Grundlegende Python-Kenntnisse, da dieses Projekt das Schreiben und Verstehen von Python-Code beinhaltet.
  2. Installieren Sie Python (3.7 oder höher) auf Ihrem System. Sie können es herunterladen von python.org .

Installation und Setup

Führen Sie die folgenden Schritte aus, um mit diesem Tutorial fortzufahren:

Befolgen Sie diese Schritte, um Ihre Umgebung einzurichten und den Aufbau des KI-gestützten Scrapers vorzubereiten.

1. Erstellen Sie eine virtuelle Umgebung

Richten Sie zunächst eine virtuelle Umgebung ein, um die Abhängigkeiten Ihres Projekts zu verwalten. Dadurch wird sichergestellt, dass Sie über einen isolierten Speicherplatz für alle erforderlichen Pakete verfügen.


  1. Erstellen Sie ein neues Projektverzeichnis:

    Öffnen Sie Ihr Terminal (oder die Eingabeaufforderung/PowerShell unter Windows) und erstellen Sie ein neues Verzeichnis für Ihr Projekt:

     mkdir ai-website-scraper cd ai-website-scraper


  2. Erstellen Sie die virtuelle Umgebung:

Führen Sie den folgenden Befehl aus, um die virtuelle Umgebung zu erstellen:


  • Unter Windows:

     python -m venv venv
  • Unter macOS/Linux:

     python3 -m venv venv


Dadurch wird ein venv -Ordner erstellt, in dem die virtuelle Umgebung gespeichert wird.


2. Aktivieren Sie die virtuelle Umgebung

Aktivieren Sie die virtuelle Umgebung, um mit der Arbeit darin zu beginnen:


  • Unter Windows:

     .\venv\Scripts\activate
  • Unter macOS/Linux:

     source venv/bin/activate


Ihre Terminal-Eingabeaufforderung ändert sich in „show ( venv )“ und bestätigt, dass Sie sich jetzt in der virtuellen Umgebung befinden.

3. Erforderliche Abhängigkeiten installieren

Installieren Sie nun die Bibliotheken, die Ihr Projekt benötigt. Erstellen Sie eine Datei requirements.txt in Ihrem Projektverzeichnis und fügen Sie die folgenden Abhängigkeiten hinzu:


 streamlit selenium Beautifulsoup4 langchain langchain-ollama lxml html5lib


Diese Pakete sind für das Scraping, die Datenverarbeitung und den Aufbau der Benutzeroberfläche unerlässlich:

  • streamlit : Dies wird zum Erstellen der interaktiven Benutzeroberfläche verwendet.

  • Selenium : Zum Scraping von Website-Inhalten.

  • beautifulsoup4 : Zum Parsen und Bereinigen des HTML.

  • langchain und langchain-ollama : Dies dient der Integration mit dem Ollama LLM und der Textverarbeitung.

  • lxml und html5lib : Für erweitertes HTML-Parsing.


Installieren Sie die Abhängigkeiten, indem Sie den folgenden Befehl ausführen:

(Stellen Sie sicher, dass Sie sich in dem Ordner befinden, in dem sich die Datei befindet, bevor Sie den Befehl ausführen.)


 pip install -r requirements.txt


Erstellen der Benutzeroberfläche mit Streamlit

Streamlit erleichtert das Erstellen einer interaktiven Benutzeroberfläche (UI) für Python-Anwendungen. In diesem Abschnitt erstellen Sie eine einfache, benutzerfreundliche Oberfläche, in der Benutzer eine URL eingeben und die Scraped-Daten anzeigen können.

1. Richten Sie das Streamlit-Skript ein

Erstellen Sie in Ihrem Projektverzeichnis eine Datei mit dem Namen ui.py. Dieses Skript definiert die Benutzeroberfläche für Ihren Scraper. Verwenden Sie den folgenden Code, um Ihre Anwendung zu strukturieren:

 import streamlit as st import pathlib from main import scrape_website # function to load css from the assets folder def load_css(file_path): with open(file_path) as f: st.html(f"<style>{f.read()}</style>") # Load the external CSS css_path = pathlib.Path("assets/style.css") if css_path.exists(): load_css(css_path) st.title("AI Scraper") st.markdown( "Enter a website URL to scrape, clean the text content, and display the result in smaller chunks." ) url = st.text_input(label= "", placeholder="Enter the URL of the website you want to scrape") if st.button("Scrape", key="scrape_button"): st.write("scraping the website...") result = scrape_website(url) st.write("Scraping complete.") st.write(result)


  • Die Funktionen st.title und st.markdown legen den Anwendungstitel fest und geben Anweisungen für Benutzer.
  • Mit der Komponente st.text_input können Benutzer die URL der Website eingeben, die sie scrapen möchten.
  • Durch Klicken auf die Schaltfläche „Scrape“ wird die Scraping-Logik ausgelöst und Fortschrittsmeldungen mithilfe von st.info angezeigt.


Weitere Informationen zu Streamlit-Komponenten erhalten Sie bei Dokumentation .

2. Benutzerdefinierte Stile hinzufügen

Um Ihre Anwendung zu gestalten, erstellen Sie einen Assets-Ordner in Ihrem Projektverzeichnis und fügen Sie eine style.css-Datei hinzu. Passen Sie die Streamlit-Oberfläche mit CSS an:

 .stAppViewContainer { background-image: url("https://images.unsplash.com/photo-1732979887702-40baea1c1ff6?q=80&w=2832&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"); background-size: cover; color: black; } .stAppHeader { background-color: rgba(0, 0, 0, 0); } .st-ae { background-color: rgba(233, 235, 234, 0.895); } .st-emotion-cache-ysk9xe { color: black; } .st.info, .stAlert { background-color: black; } .st-key-scrape_button button { display: inline-block; padding: 10px 20px; font-size: 16px; color: #fff; background-color: #007bff; border: none; border-radius: 5px; cursor: pointer; animation: pulse 2s infinite; } .st-key-scrape_button button:hover { background-color: #0056b3; color: #fff; }


3. Führen Sie die Streamlit-App aus

Führen Sie in Ihrem Projektverzeichnis den folgenden Befehl aus:

 streamlit run ui.py


Dadurch wird ein lokaler Server gestartet. Im Terminal sollte eine URL angezeigt werden, normalerweise http://localhost:8501 . Öffnen Sie diese URL in Ihrem Browser, um mit der Webanwendung zu interagieren.

AI Scraper App

Scraping von Websites mit Selenium

Schreiben Sie als Nächstes den Code, um den HTML-Inhalt einer beliebigen Webseite mit Selenium zu extrahieren. Damit der Code funktioniert, benötigen Sie jedoch einen Chrome WebDriver.

Installieren Sie ChromeDriver für Selenium

Selenium benötigt einen WebDriver, um mit Webseiten zu interagieren. So richten Sie ihn ein:

  1. ChromeDriver herunterladen:
    Besuchen Sie diese ChromeDriver-Website und laden Sie die Version herunter, die zu Ihrem Google Chrome-Browser passt.
  2. ChromeDriver zu PATH hinzufügen


Nachdem Sie ChromeDriver heruntergeladen haben, extrahieren Sie die Datei, kopieren Sie den Anwendungsdateinamen „ chromedriver “ und fügen Sie ihn in Ihren Projektordner ein.

Wenn dies erledigt ist, erstellen Sie eine neue Datei namens main.py und implementieren Sie den folgenden Code:

 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # Function to scrape HTML from a website def scrape_website(website_url): # Path to WebDriver webdriver_path = "./chromedriver" # Replace with your WebDriver path service = Service(webdriver_path) driver = webdriver.Chrome(service=service) try: # Open the website driver.get(website_url) # Wait for the page to fully load WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, "body"))) # Extract the HTML source html_content = driver.page_source return html_content finally: # Ensure the browser is closed after scraping driver.quit()


Speichern und führen Sie den Code aus. Das gesamte HTML der Seite, die Sie kopiert haben, sollte in Ihrer Streamlit-Anwendung wie folgt angezeigt werden:

Verwenden eines Proxy-Anbieters zum Umgehen von Websites mit Captcha und IP-Sperren

Obwohl Sie jetzt das HTML einer Website abrufen können, funktioniert der obige Code möglicherweise nicht für Websites mit erweiterten Anti-Scraping-Mechanismen wie CAPTCHA-Herausforderungen oder IP-Sperren. Wenn Sie beispielsweise eine Site wie Indeed oder Amazon mit Selenium scrapen, kann dies dazu führen, dass eine CAPTCHA-Seite den Zugriff blockiert. Dies geschieht, weil die Website erkennt, dass ein Bot versucht, auf ihren Inhalt zuzugreifen. Wenn dieses Verhalten anhält, kann die Site Ihre IP-Adresse schließlich sperren und weiteren Zugriff verhindern.


Captcha


Um dies zu beheben, integrieren Sie Scraping-Browser von Bright Data in Ihr Skript. Der Scraping-Browser ist ein robustes Tool, das mehrere Proxy-Netzwerke, einschließlich privater IPs, nutzt, um Anti-Scraping-Abwehrmaßnahmen zu umgehen. Er übernimmt das Entsperren von Seiten, indem er benutzerdefinierte Header, Browser-Fingerprinting, CAPTCHA-Lösung und mehr verwaltet. Dadurch wird sichergestellt, dass Ihre Scraping-Bemühungen unentdeckt bleiben, während Sie nahtlos auf Inhalte zugreifen.

Kostenlose Einrichtung des Scraping Browsers von Bright Data

  1. Anmeldung — gehen Sie zu Homepage von Bright Data und klicken Sie auf „ Kostenlose Testversion starten “. Wenn Sie bereits ein Konto bei Bright Data haben, können Sie sich einfach anmelden.

  2. Klicken Sie nach der Anmeldung auf „ Proxy-Produkte abrufen “.


  3. Klicken Sie auf die Schaltfläche „ Hinzufügen “ und wählen Sie „ Scraping Browser “.


  4. Als Nächstes gelangen Sie zur Seite „ Zone hinzufügen “, wo Sie einen Namen für Ihre neue Scraping-Browser-Proxy-Zone auswählen müssen. Klicken Sie anschließend auf „ Hinzufügen “.


  5. Anschließend werden Ihre Proxy-Zonen-Anmeldeinformationen erstellt. Sie benötigen diese Details in Ihrem Skript, um alle auf Websites verwendeten Anti-Scraping-Mechanismen zu umgehen.


Sie können sich für weitere Einzelheiten zum Scraping-Browser auch die Entwicklerdokumentation von Bright Data ansehen.


Ändern Sie den Code in Ihrer Datei main.py wie folgt. Sie werden feststellen, dass dieser Code übersichtlicher und kürzer ist als der vorherige Code.


 from selenium.webdriver import Remote, ChromeOptions from selenium.webdriver.chromium.remote_connection import ChromiumRemoteConnection from selenium.webdriver.common.by import By from bs4 import BeautifulSoup AUTH = '<username>:<passord>' SBR_WEBDRIVER = f'https://{AUTH}@brd.superproxy.io:9515' # Function to scrape HTML from a website def scrape_website(website_url): print("Connecting to Scraping Browser...") sbr_connection = ChromiumRemoteConnection(SBR_WEBDRIVER, "goog", "chrome") with Remote(sbr_connection, options=ChromeOptions()) as driver: driver.get(website_url) print("Waiting captcha to solve...") solve_res = driver.execute( "executeCdpCommand", { "cmd": "Captcha.waitForSolve", "params": {"detectTimeout": 10000}, }, ) print("Captcha solve status:", solve_res["value"]["status"]) print("Navigated! Scraping page content...") html = driver.page_source return html


Ersetzen Sie <Benutzername> und <Passwort> durch den Benutzernamen und das Passwort Ihres Scraping-Browsers.

Bereinigen des Dom-Inhalts

Nach dem Scrapen des HTML-Inhalts einer Website ist dieser oft mit unnötigen Elementen wie JavaScript, CSS-Stilen oder unerwünschten Tags gefüllt, die nichts zu den Kerninformationen beitragen, die Sie extrahieren. Um die Daten strukturierter und für die weitere Verarbeitung nützlicher zu machen, müssen Sie den DOM-Inhalt bereinigen, indem Sie irrelevante Elemente entfernen und den Text organisieren.


In diesem Abschnitt wird erläutert, wie Sie den HTML-Inhalt bereinigen, aussagekräftigen Text extrahieren und ihn für die Weiterverarbeitung in kleinere Teile aufteilen. Der Bereinigungsprozess ist wichtig, um Daten für Aufgaben wie die Verarbeitung natürlicher Sprache oder die Inhaltsanalyse vorzubereiten.

Code-Walkthrough zum Bereinigen von DOM-Inhalten

Hier ist der Code, der zu main.py hinzugefügt wird, um die Bereinigung des DOM-Inhalts zu handhaben:


 from bs4 import BeautifulSoup # Extract the body content from the HTML def extract_body_content(html_content): soup = BeautifulSoup(html_content, "html.parser") body_content = soup.body if body_content: return str(body_content) return "" # Clean the body content by removing scripts, styles, and other unwanted elements def clean_body_content(body_content): soup = BeautifulSoup(body_content, "html.parser") # Remove <script> and <style> tags for script_or_style in soup(["script", "style"]): script_or_style.extract() # Extract cleaned text with each line separated by a newline cleaned_content = soup.get_text(separator="\n") cleaned_content = "\n".join( line.strip() for line in cleaned_content.splitlines() if line.strip() ) return cleaned_content # Split the cleaned content into smaller chunks for processing def split_dom_content(dom_content, max_length=5000): return [ dom_content[i : i + max_length] for i in range(0, len(dom_content), max_length) ]


Was der Code bewirkt

  1. Extrahieren des Hauptteilinhalts:
    • Die Funktion extract_body_content verwendet BeautifulSoup, um das HTML zu analysieren und den Inhalt des <body> -Tags zu extrahieren.
    • Wenn ein <body> -Tag vorhanden ist, gibt die Funktion es als Zeichenfolge zurück. Andernfalls gibt sie eine leere Zeichenfolge zurück.
  2. Reinigen des Inhalts:
    • Die Funktion clean_body_content verarbeitet den extrahierten Inhalt, um unnötige Elemente zu entfernen:
      • <script>- und <style> -Tags werden entfernt, um JavaScript und CSS zu eliminieren.
      • Die Funktion ruft den Klartext aus dem bereinigten Inhalt ab.
      • Es formatiert den Text, indem es Leerzeilen und überflüssige Leerzeichen entfernt.
  3. Aufteilen des Inhalts:
    • Die Funktion split_dom_content nimmt den bereinigten Inhalt und teilt ihn in kleinere Teile mit einer standardmäßigen maximalen Länge von 5.000 Zeichen auf.
    • Dies ist nützlich, um große Textmengen in überschaubaren Teilen zu verarbeiten, insbesondere beim Übergeben von Daten an Modelle mit Token- oder Eingabegrößenbeschränkungen.


Speichern Sie Ihre Änderungen und testen Sie Ihre Anwendung. Nach dem Scraping einer Website sollten Sie eine Ausgabe wie diese erhalten.

Analysieren des Dom-Inhalts für Ollama

Sobald der DOM-Inhalt bereinigt und vorbereitet ist, besteht der nächste Schritt darin, die Informationen zu analysieren, um spezifische Details zu extrahieren. Ollama , ein in LangChain integriertes Large Language Model (LLM). Ollama ist ein CLI-Tool zum Herunterladen und lokalen Ausführen von LLMs. Bevor Sie Ollama verwenden können, müssen Sie jedoch die folgenden Installationen durchführen:


  • Wenn nicht, laden Sie Ollama herunter und installieren Sie es vom offizielle Website . Sie können es auf dem Mac mit dem Befehl Homebrew installieren.

     brew install ollama
  • Installieren Sie anschließend ein beliebiges Modell von diese Liste ; es gibt Modelle wie Phi3, Mistral, Gemma 2 usw.; jedes hat seine eigenen Systemanforderungen. Dieser Code verwendet Phi3 hauptsächlich, weil es leicht ist.

     ollama pull phi3


Nach der Installation können Sie dieses Modell mit LangChain aus Ihrem Skript aufrufen, um aus den Daten, die an das Modell gesendet werden, aussagekräftige Erkenntnisse zu gewinnen.


So richten Sie die Funktionalität zum Parsen von DOM-Inhalten in das Phi3 -Modell ein

Code-Komplettlösung für llm.py

Der folgende Code implementiert die Logik zum Parsen von DOM-Blöcken mit Ollama und Extrahieren relevanter Details:

 from langchain_ollama import OllamaLLM from langchain_core.prompts import ChatPromptTemplate # Template to instruct Ollama for parsing template = ( "You are tasked with extracting specific information from the following text content: {dom_content}. " "Please follow these instructions carefully: \n\n" "1. **Extract Information:** Only extract the information that directly matches the provided description: {parse_description}. " "2. **No Extra Content:** Do not include any additional text, comments, or explanations in your response. " "3. **Empty Response:** If no information matches the description, return an empty string ('')." "4. **Direct Data Only:** Your output should contain only the data that is explicitly requested, with no other text." ) # Initialize the Ollama model model = OllamaLLM(model="phi3") # Function to parse DOM chunks with Ollama def parse_with_ollama(dom_chunks, parse_description): prompt = ChatPromptTemplate.from_template(template) chain = prompt | model parsed_results = [] for i, chunk in enumerate(dom_chunks, start=1): if not chunk.strip(): # Skip empty chunks print(f"Skipping empty chunk at batch {i}") continue try: print(f"Processing chunk {i}: {chunk[:100]}...") # Print a preview print(f"Parse description: {parse_description}") response = chain.invoke( { "dom_content": chunk, "parse_description": parse_description, } ) print(f"Response for batch {i}: {response}") parsed_results.append(response) except Exception as e: print(f"Error parsing chunk {i}: {repr(e)}") parsed_results.append(f"Error: {repr(e)}") return "\n".join(parsed_results)

Was der Code macht.

  1. Anleitungsvorlage:
    • Bietet Ollama genaue Anleitungen dazu, welche Informationen extrahiert werden sollen.
    • Stellt sicher, dass die Ausgabe sauber, präzise und für die Analysebeschreibung relevant ist.
  2. Chunk-Verarbeitung:
    • Die Funktion parse_with_ollama durchläuft die DOM-Blöcke und verarbeitet jeden mit dem LLM.
    • Überspringt leere Blöcke, um die Leistung zu optimieren.
  3. Fehlerbehandlung:
    • Behandelt Fehler ordnungsgemäß, protokolliert sie und fährt mit der Verarbeitung der verbleibenden Blöcke fort.

Aktualisieren der Datei ui.py

Fügen Sie der Datei ui.py den folgenden Code hinzu, um Benutzern die Eingabe von Analyseanweisungen in das LLM und die Anzeige von Ergebnissen zu ermöglichen:

 from main import scrape_website, extract_body_content, clean_body_content, split_dom_content from llm import parse_with_ollama if "dom_content" in st.session_state: parse_description = st.text_area("Enter a description to extract specific insights from your scraped data:") if st.button("Parse Content", key="parse_button"): if parse_description.strip() and st.session_state.get("dom_content"): st.info("Parsing the content...") dom_chunks = split_dom_content(st.session_state.dom_content) parsed_result = parse_with_ollama(dom_chunks, parse_description) st.text_area("Parsed Results", parsed_result, height=300) else: st.error("Please provide valid DOM content and a description to parse.")

So funktioniert es in der Benutzeroberfläche

  1. Benutzereingabe:
    • Der Benutzer gibt in einem Textbereich eine Beschreibung der zu extrahierenden Daten in natürlicher Sprache ein.
  2. Auslöser für die Analyse:
    • Wenn Sie auf die Schaltfläche „Inhalt analysieren“ klicken, wird der bereinigte DOM-Inhalt in überschaubare Blöcke aufgeteilt und an parse_with_ollama übergeben.
  3. Ergebnisanzeige:
    • Die analysierten Ergebnisse werden in einem Textbereich angezeigt, sodass Benutzer die extrahierten Informationen überprüfen können.


Wenn dies erledigt ist, kann der Scraper nun auf Grundlage der extrahierten Daten Antworten auf Ihre Eingabeaufforderungen bereitstellen.


Wie geht es weiter?

Die Kombination aus Web Scraping und KI eröffnet spannende Möglichkeiten für datengesteuerte Erkenntnisse. Über das Sammeln und Speichern von Daten hinaus können Sie KI jetzt nutzen, um den Prozess der Gewinnung von Erkenntnissen aus den Scraped-Daten zu optimieren. Dies ist nützlich für Marketing- und Vertriebsteams, Datenanalysen, Geschäftsinhaber und viele mehr.


Den vollständigen Code für den KI-Scraper finden Sie hier. Experimentieren Sie ruhig damit und passen Sie ihn an Ihre individuellen Bedürfnisse an. Beiträge sind ebenfalls willkommen – wenn Sie Verbesserungsvorschläge haben, erstellen Sie doch einfach einen Pull Request!


Sie können dies auch noch weiterführen. Hier sind einige Ideen:

  • Experimentieren Sie mit Eingabeaufforderungen: Passen Sie Ihre Eingabeaufforderungen an, um bestimmte Erkenntnisse zu gewinnen oder auf einzigartige Projektanforderungen einzugehen.
  • Benutzeroberfläche
  • Integrieren Sie andere LLM-Modelle: Entdecken Sie andere Sprachmodelle wie OpenAI , Zwillinge , usw., um Ihre Datenanalyse weiter zu optimieren.