paint-brush
Hajde da napravimo besplatni alat za struganje veba koji kombinuje proxy servere i veštačku inteligenciju za analizu podatakaby@aviatorscode2
Nova istorija

Hajde da napravimo besplatni alat za struganje veba koji kombinuje proxy servere i veštačku inteligenciju za analizu podataka

by Victor Yakubu15m2024/12/17
Read on Terminal Reader

Predugo; Citati

Naučite kako kombinirati web scraping, proksije i jezičke modele zasnovane na umjetnoj inteligenciji kako biste automatizirali ekstrakciju podataka i stekli praktične uvide bez napora.
featured image - Hajde da napravimo besplatni alat za struganje veba koji kombinuje proxy servere i veštačku inteligenciju za analizu podataka
Victor Yakubu HackerNoon profile picture
0-item
1-item
2-item

Dok je neke web stranice jednostavno obrisati koristeći samo Selenium, Puppeteer i slično, druge web stranice koje implementiraju napredne sigurnosne mjere kao što su CAPTCHA i IP zabrane mogu se pokazati teškim. Da biste prevladali ove izazove i osigurali da možete besplatno scraperirati 99% web stranica pomoću Scrapera, izgradit ćete ovo u ovom članku i integrirat ćete proxy alat u vašem kodu koji će vam pomoći da zaobiđete ove sigurnosne mjere.


Međutim, prikupljanje podataka je samo jedan korak; ono što radite sa tim podacima je podjednako važno, ako ne i više. Često, to zahtijeva pažljivo probiranje velikih količina informacija ručno. Ali šta ako možete automatizirati ovaj proces? Koristeći jezički model (LLM), ne samo da možete prikupljati podatke, već ih i ispitivati kako biste izvukli smislene uvide – štedeći vrijeme i trud.


U ovom vodiču ćete naučiti kako kombinirati web scraping s AI-om da biste izgradili moćan alat za besplatno prikupljanje i analizu podataka u velikom obimu. Uronimo!

Preduvjeti

Prije nego što počnete, provjerite imate li sljedeće:

  1. Osnovno znanje o Python-u, jer ovaj projekat uključuje pisanje i razumijevanje Python koda.
  2. Instalirajte Python (3.7 ili noviji) na svoj sistem. Možete ga preuzeti sa python.org .

Instalacija i podešavanje

Da nastavite s ovim vodičem, dovršite sljedeće korake:

Slijedite ove korake da biste postavili svoje okruženje i pripremili se za izgradnju strugača koji pokreće AI.

1. Kreirajte virtuelno okruženje

Prvo, postavite virtualno okruženje za upravljanje ovisnostima vašeg projekta. Ovo će osigurati da imate izolovan prostor za sve potrebne pakete.


  1. Kreirajte novi direktorij projekta:

    Otvorite svoj terminal (ili Command Prompt/PowerShell na Windowsu) i kreirajte novi direktorij za svoj projekt:

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


  2. Kreirajte virtuelno okruženje:

Pokrenite sljedeću naredbu da kreirate virtuelno okruženje:


  • Na Windowsima:

     python -m venv venv
  • Na macOS/Linuxu:

     python3 -m venv venv


Ovo kreira fasciklu venv koja će pohraniti virtuelno okruženje.


2. Aktivirajte virtuelno okruženje

Aktivirajte virtuelno okruženje da počnete raditi u njemu:


  • Na Windowsima:

     .\venv\Scripts\activate
  • Na macOS/Linuxu:

     source venv/bin/activate


Vaš terminalski prompt će se promijeniti u show ( venv ), potvrđujući da ste sada unutar virtuelnog okruženja.

3. Instalirajte potrebne ovisnosti

Sada instalirajte biblioteke koje su potrebne vašem projektu. Kreirajte datoteku requirements.txt u direktoriju vašeg projekta i dodajte sljedeće zavisnosti:


 streamlit selenium Beautifulsoup4 langchain langchain-ollama lxml html5lib


Ovi paketi su neophodni za scraping, obradu podataka i izgradnju korisničkog sučelja:

  • streamlit : Koristi se za kreiranje interaktivnog korisničkog interfejsa.

  • Selen : Za scraping sadržaja web stranice.

  • beautifulsoup4 : Za raščlanjivanje i čišćenje HTML-a.

  • langchain i langchain-ollama : Ovo je za integraciju sa Ollama LLM i obradu teksta.

  • lxml i html5lib : Za napredno raščlanjivanje HTML-a.


Instalirajte zavisnosti tako što ćete pokrenuti sljedeću naredbu:

(Uverite se da ste u fascikli u kojoj se datoteka nalazi pre nego što pokrenete komandu.)


 pip install -r requirements.txt


Izgradnja korisničkog sučelja sa Streamlit-om

Streamlit olakšava kreiranje interaktivnog korisničkog interfejsa (UI) za Python aplikacije. U ovom odeljku ćete izgraditi jednostavan, user-friendly interfejs gde korisnici mogu da unesu URL i prikažu skrapane podatke.

1. Postavite Streamlit Script

Kreirajte datoteku pod nazivom ui.py u direktoriju vašeg projekta. Ova skripta će definirati korisničko sučelje za vaš scraper. Koristite kod u nastavku da strukturirate svoju aplikaciju:

 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)


  • Funkcije st.title i st.markdown postavljaju naslov aplikacije i pružaju upute za korisnike.
  • Komponenta st.text_input omogućava korisnicima da unesu URL web-stranice koju žele da scrape.
  • Klikom na dugme "Scrape" pokreće se logika struganja, prikazujući poruke o napretku pomoću st.info .


Možete saznati više o komponentama streamlit iz njihovih dokumentaciju .

2. Dodajte prilagođene stilove

Da biste stilizirali svoju aplikaciju, kreirajte mapu imovine u direktoriju projekta i dodajte datoteku style.css. Prilagodite Streamlit interfejs pomoću CSS-a:

 .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. Pokrenite aplikaciju Streamlit

U direktoriju vašeg projekta pokrenite sljedeću naredbu:

 streamlit run ui.py


Ovo će pokrenuti lokalni server i trebali biste vidjeti URL u terminalu, obično http://localhost:8501 . Otvorite ovaj URL u svom pretraživaču za interakciju s web aplikacijom.

Aplikacija AI Scraper

Scraping web stranice sa Selenom

Zatim napišite kod za izdvajanje HTML sadržaja bilo koje web stranice koristeći Selenium. Međutim, da bi kod funkcionirao, potreban vam je Chrome WebDriver.

Instalirajte ChromeDriver za Selenium

Selenium zahtijeva WebDriver za interakciju sa web stranicama. Evo kako to postaviti:

  1. Preuzmite ChromeDriver:
    Posjetite ovo Web lokacija ChromeDriver i preuzmite verziju koja odgovara vašem pregledniku Google Chrome.
  2. Dodajte ChromeDriver u PATH


Nakon preuzimanja ChromeDriver-a, raspakirajte datoteku i kopirajte naziv datoteke aplikacije " chromedriver " i zalijepite je u fasciklu projekta.

Kada se ovo završi, kreirajte novu datoteku pod nazivom main.py i implementirajte kod u nastavku:

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


Sačuvajte i pokrenite kod; trebali biste dobiti sav HTML stranice koju ste scrapingirali prikazan u vašoj streamlit aplikaciji na sljedeći način:

Korištenje proxy provajdera za zaobilaženje web stranice sa Captcha i IP zabranama

Iako sada možete dohvatiti HTML web stranice, gornji kod možda neće funkcionirati za web lokacije s naprednim mehanizmima protiv grebanja kao što su CAPTCHA izazovi ili IP zabrane. Na primjer, scraping stranice poput Indeeda ili Amazona koristeći Selenium može dovesti do blokiranja pristupa CAPTCHA stranici. To se događa zato što web stranica otkrije da bot pokušava pristupiti njegovom sadržaju. Ako se ovo ponašanje nastavi, stranica može na kraju zabraniti vašu IP adresu, sprječavajući dalji pristup.


Captcha


Da biste ovo popravili, integrirajte Bright Data's Scraping Browser u vaš scenario. Scraping pretraživač je robustan alat koji koristi višestruke proxy mreže, uključujući rezidencijalne IP-ove, da zaobiđe odbranu od scraping-a. On upravlja deblokiranjem stranica upravljanjem prilagođenim zaglavljima, otiskom prstiju pretraživača, rješavanjem CAPTCHA i još mnogo toga. Ovo osigurava da vaši napori za scraping ostanu neprimećeni dok neometano pristupate sadržaju.

Besplatno postavljanje Bright Data Scraping pretraživača

  1. Prijavljivanje — idite na Početna stranica Bright Data i kliknite na “ Pokreni besplatnu probnu verziju ”. Ako već imate nalog sa Bright Data, možete se samo prijaviti.

  2. Nakon što se prijavite, kliknite na “ Nabavi proxy proizvode ”.


  3. Kliknite na dugme “ Dodaj ” i odaberite “ Scraping Browser ”.


  4. Zatim ćete biti preusmjereni na stranicu „ Dodaj zonu “, gdje će se od vas tražiti da odaberete ime za svoju novu proxy zonu pretraživača. Nakon toga kliknite na " Dodaj ".


  5. Nakon ovoga, kreiraće se vjerodajnice vaše proxy zone. Ovi detalji će vam trebati u vašoj skripti da biste zaobišli sve mehanizme protiv grebanja koji se koriste na bilo kojoj web stranici.


Također možete pogledati dokumentaciju za programere Bright Data za više detalja o pretraživaču za scraping.


U datoteci main.py promijenite kod u ovaj. Primijetit ćete da je ovaj kod čišći i kraći od prethodnog koda.


 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


Zamijenite <korisničko ime> i <password> korisničkim imenom i lozinkom vašeg pretraživača.

Čišćenje sadržaja Doma

Nakon grebanja HTML sadržaja web stranice, često je ispunjen nepotrebnim elementima kao što su JavaScript, CSS stilovi ili neželjene oznake koje ne doprinose osnovnim informacijama koje izdvajate. Da bi podaci bili strukturiraniji i korisniji za dalju obradu, potrebno je da očistite DOM sadržaj uklanjanjem nebitnih elemenata i organiziranjem teksta.


Ovaj odjeljak objašnjava kako očistiti HTML sadržaj, izdvojiti smisleni tekst i podijeliti ga na manje komade za daljnju obradu. Proces čišćenja je neophodan za pripremu podataka za zadatke poput obrade prirodnog jezika ili analize sadržaja.

Uputa za čišćenje DOM sadržaja

Evo koda koji će biti dodan u main.py za rukovanje čišćenjem DOM sadržaja:


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


Šta radi kod

  1. Ekstrakcija tjelesnog sadržaja:
    • Funkcija extract_body_content koristi BeautifulSoup za raščlanjivanje HTML-a i izdvajanje sadržaja oznake <body> .
    • Ako oznaka <body> postoji, funkcija je vraća kao string. U suprotnom, vraća prazan niz.
  2. Čišćenje sadržaja:
    • Clean_body_content funkcija obrađuje ekstrahovani sadržaj kako bi uklonila nepotrebne elemente:
      • Oznake <script> i <style> su uklonjene kako bi se eliminirali JavaScript i CSS.
      • Funkcija preuzima običan tekst iz očišćenog sadržaja.
      • On formatira tekst uklanjajući prazne redove i suvišne razmake.
  3. Podjela sadržaja:
    • Funkcija split_dom_content uzima očišćeni sadržaj i dijeli ga na manje komade sa zadanom maksimalnom dužinom od 5.000 znakova.
    • Ovo je korisno za obradu velikih količina teksta u komadima kojima se može upravljati, posebno kada prosljeđujete podatke modelima s ograničenjima veličine tokena ili unosa.


Sačuvajte promjene i testirajte svoju aplikaciju. Trebali biste dobiti ovakav izlaz nakon scrapinga web stranice.

Parsiranje sadržaja Doma Ollami

Nakon što je DOM sadržaj očišćen i pripremljen, sljedeći korak je raščlanjivanje informacija kako bi se pomoću njih izdvojili određeni detalji Ollama , model velikog jezika (LLM) integriran s LangChainom. Ollama je CLI alat koji se koristi za lokalno preuzimanje i pokretanje LLM-ova. Međutim, prije korištenja Ollame, morate izvršiti sljedeće instalacije:


  • Ako niste, preuzmite i instalirajte Ollamu sa stranice službena web stranica . Možete ga instalirati na Mac koristeći naredbu Homebrew.

     brew install ollama
  • Zatim instalirajte bilo koji model iz ovu listu ; postoje modeli poput Phi3, Mistral, Gemma 2, itd.; svaki ima svoje sistemske zahtjeve. Ovaj kod koristi phi3 uglavnom zato što je lagan.

     ollama pull phi3


Nakon instalacije, možete pozvati taj model iz svoje skripte koristeći LangChain kako biste pružili smislene uvide iz podataka koji će mu biti poslati.


Evo kako postaviti funkcionalnost za raščlanjivanje DOM sadržaja u phi3 model

Vodič za kod za llm.py

Sljedeći kod implementira logiku za raščlanjivanje DOM dijelova s Ollama-om i izdvajanje relevantnih detalja:

 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)

Šta radi kod.

  1. Šablon uputstva:
    • Pruža precizne smjernice za Ollamu o tome koje informacije treba izdvojiti.
    • Osigurava da je izlaz čist, koncizan i relevantan za opis raščlanjivanja.
  2. Obrada komada:
    • Funkcija parse_with_ollama iterira kroz DOM dijelove, obrađujući svaki sa LLM-om.
    • Preskače prazne komade radi optimizacije performansi.
  3. Obrada grešaka:
    • Graciozno rukuje greškama, evidentira ih i nastavlja obradu preostalih komada.

Ažuriranje datoteke ui.py datoteke

Dodajte sljedeći kod u datoteku ui.py kako biste omogućili korisnicima da unose upute za raščlanjivanje u LLM i pregledaju rezultate:

 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.")

Kako to radi u korisničkom sučelju

  1. Unos korisnika:
    • Korisnik daje opis podataka na prirodnom jeziku za izdvajanje u tekstualnom području.
  2. Okidač za raščlanjivanje:
    • Kada se klikne na dugme Parse Content, očišćeni DOM sadržaj se deli na upravljive delove i prosleđuje parse_with_ollama.
  3. Prikaz rezultata:
    • Raščlamljeni rezultati se prikazuju u oblasti teksta, omogućavajući korisnicima da pregledaju ekstrahovane informacije.


Kada je ovo urađeno, strugač sada može dati odgovore na vaše upite na osnovu skrapanih podataka.


Šta je sljedeće?

Kombinacija web scrapinga i AI otvara uzbudljive mogućnosti za uvide vođene podacima. Osim prikupljanja i spremanja podataka, sada možete iskoristiti AI za optimizaciju procesa stjecanja uvida iz prikupljenih podataka. Ovo je korisno za marketinške i prodajne timove, analizu podataka, vlasnike preduzeća i još mnogo toga.


Ovdje možete pronaći kompletan kod za AI strugač. Slobodno eksperimentirajte s njim i prilagodite ga svojim jedinstvenim potrebama. Doprinosi su također dobrodošli—ako imate ideje za poboljšanja, razmislite o kreiranju zahtjeva za povlačenje!


Ovo također možete nastaviti dalje. Evo nekoliko ideja:

  • Eksperimentirajte sa upitima: Prilagodite svoje upite da izvučete specifične uvide ili odgovorite na jedinstvene zahtjeve projekta.
  • Korisničko sučelje
  • Integrirajte druge LLM modele: Istražite druge jezičke modele poput OpenAI , Blizanci , itd. kako biste dodatno optimizirali analizu podataka.