paint-brush
Veri Analizi için Proxy'leri ve Yapay Zekayı Birleştiren Ücretsiz Bir Web Kazıma Aracı Oluşturalımile@aviatorscode2
Yeni tarih

Veri Analizi için Proxy'leri ve Yapay Zekayı Birleştiren Ücretsiz Bir Web Kazıma Aracı Oluşturalım

ile Victor Yakubu15m2024/12/17
Read on Terminal Reader

Çok uzun; Okumak

Veri çıkarmayı otomatikleştirmek ve eyleme dönüştürülebilir içgörüleri zahmetsizce elde etmek için web kazıma, proxy'ler ve yapay zeka destekli dil modellerini nasıl birleştireceğinizi öğrenin.
featured image - Veri Analizi için Proxy'leri ve Yapay Zekayı Birleştiren Ücretsiz Bir Web Kazıma Aracı Oluşturalım
Victor Yakubu HackerNoon profile picture
0-item
1-item
2-item

Bazı web siteleri yalnızca Selenium, Puppeteer ve benzerlerini kullanarak kolayca taranabilirken, CAPTCHA'lar ve IP yasakları gibi gelişmiş güvenlik önlemleri uygulayan diğer web siteleri zor olabilir. Bu zorlukların üstesinden gelmek ve Scraper'ı kullanarak web sitelerinin %99'unu ücretsiz olarak tarayabildiğinizden emin olmak için, bu makalede bunu oluşturacaksınız ve bir proxy aracı Bu güvenlik önlemlerini aşmanıza yardımcı olacak kodunuzda.


Ancak, verileri toplamak sadece bir adımdır; bu verilerle ne yaptığınız da en az onlar kadar, hatta daha da önemlidir. Genellikle, bu büyük miktarda bilgiyi elle titizlikle elemeyi gerektirir. Peki ya bu süreci otomatikleştirebilirseniz? Bir dil modelinden (LLM) yararlanarak, yalnızca verileri toplamakla kalmaz, aynı zamanda anlamlı içgörüler çıkarmak için sorgulayabilirsiniz; bu da zamandan ve emekten tasarruf sağlar.


Bu kılavuzda, web kazımayı yapay zeka ile birleştirerek ücretsiz olarak büyük ölçekte veri toplama ve analiz etme konusunda güçlü bir araç oluşturmayı öğreneceksiniz. Hadi başlayalım!

Ön koşullar

Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:

  1. Bu proje Python kodunu yazmayı ve anlamayı içerdiğinden temel Python bilgisi.
  2. Sisteminize Python'u (3.7 veya üzeri) yükleyin. Buradan indirebilirsiniz python.org .

Kurulum ve Kurulum

Bu eğitime devam etmek için aşağıdaki adımları tamamlayın:

Ortamınızı kurmak ve yapay zeka destekli kazıyıcıyı oluşturmaya hazırlanmak için şu adımları izleyin.

1. Sanal Bir Ortam Oluşturun

Öncelikle projenizin bağımlılıklarını yönetmek için sanal bir ortam kurun. Bu, gerekli tüm paketler için izole bir alana sahip olmanızı sağlayacaktır.


  1. Yeni bir proje dizini oluşturun:

    Terminalinizi (veya Windows'ta Komut İstemi/PowerShell'i) açın ve projeniz için yeni bir dizin oluşturun:

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


  2. Sanal ortamı yaratın:

Sanal ortamı oluşturmak için aşağıdaki komutu çalıştırın:


  • Windows'ta:

     python -m venv venv
  • macOS/Linux'ta:

     python3 -m venv venv


Bu, sanal ortamı depolayacak bir venv klasörü oluşturur.


2. Sanal Ortamı Etkinleştirin

İçinde çalışmaya başlamak için sanal ortamı etkinleştirin:


  • Windows'ta:

     .\venv\Scripts\activate
  • macOS/Linux'ta:

     source venv/bin/activate


Terminal isteminiz ( venv ) olarak değişecek ve sanal ortamda olduğunuzu doğrulayacaktır.

3. Gerekli Bağımlılıkları Yükleyin

Şimdi, projenizin ihtiyaç duyduğu kütüphaneleri yükleyin. Proje dizininizde bir requirements.txt dosyası oluşturun ve aşağıdaki bağımlılıkları ekleyin:


 streamlit selenium Beautifulsoup4 langchain langchain-ollama lxml html5lib


Bu paketler veri toplama, veri işleme ve kullanıcı arayüzü oluşturma için olmazsa olmazdır:

  • streamlit : Etkileşimli kullanıcı arayüzü oluşturmak için kullanılır.

  • Selenium : Web sitesi içeriğini taramak için.

  • beautifulsoup4 : HTML'yi ayrıştırmak ve temizlemek için.

  • langchain ve langchain-ollama : Bu, Ollama LLM ile bütünleşmek ve metin işlemek içindir.

  • lxml ve html5lib : Gelişmiş HTML ayrıştırma için.


Aşağıdaki komutu çalıştırarak bağımlılıkları yükleyin:

(Komutu çalıştırmadan önce dosyanın bulunduğu klasörde olduğunuzdan emin olun.)


 pip install -r requirements.txt


Streamlit ile kullanıcı arayüzünü oluşturma

Akış ışıklı Python uygulamaları için etkileşimli bir kullanıcı arayüzü (UI) oluşturmayı kolaylaştırır. Bu bölümde, kullanıcıların bir URL girebileceği ve kazınmış verileri görüntüleyebileceği basit, kullanıcı dostu bir arayüz oluşturacaksınız.

1. Streamlit Komut Dosyasını Ayarlayın

Proje dizininizde ui.py adlı bir dosya oluşturun. Bu betik, kazıyıcınız için kullanıcı arayüzünü tanımlayacaktır. Uygulamanızı yapılandırmak için aşağıdaki kodu kullanın:

 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)


  • st.title ve st.markdown fonksiyonları uygulama başlığını ayarlar ve kullanıcılara talimatlar sağlar.
  • st.text_input bileşeni, kullanıcıların taramak istedikleri web sitesinin URL'sini girmelerine olanak tanır.
  • "Kazı" butonuna tıklandığında kazıma mantığı tetiklenir ve st.info kullanılarak ilerleme mesajları görüntülenir.


Streamlit bileşenleri hakkında daha fazla bilgiyi şu adresten edinebilirsiniz: belgeleme .

2. Özel Stiller Ekleyin

Uygulamanızı biçimlendirmek için proje dizininizde bir varlıklar klasörü oluşturun ve bir style.css dosyası ekleyin. Streamlit arayüzünü CSS ile özelleştirin:

 .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. Streamlit uygulamasını çalıştırın

Proje dizininizde aşağıdaki komutu çalıştırın:

 streamlit run ui.py


Bu yerel bir sunucuyu başlatacak ve terminalde genellikle http://localhost:8501 bir URL görmelisiniz. Web uygulamasıyla etkileşim kurmak için bu URL'yi tarayıcınızda açın.

AI Kazıyıcı Uygulaması

Selenium ile web sitesi kazıma

Sonra, Selenium kullanarak herhangi bir web sayfasının HTML içeriğini çıkarmak için kodu yazın. Ancak, kodun çalışması için bir Chrome WebDriver'a ihtiyacınız var.

Selenium için ChromeDriver'ı yükleyin

Selenium'un web sayfalarıyla etkileşime girmesi için bir WebDriver'a ihtiyacı vardır. İşte nasıl kurulacağı:

  1. ChromeDriver'ı indirin:
    Bunu ziyaret edin ChromeDriver web sitesi ve Google Chrome tarayıcınıza uygun sürümü indirin.
  2. ChromeDriver'ı PATH'e ekleyin


ChromeDriver’ı indirdikten sonra dosyayı çıkartın ve uygulama dosya adı olan “ chromedriver ” kısmını kopyalayıp proje klasörünüze yapıştırın.

Bunu yaptıktan sonra main.py adında yeni bir dosya oluşturun ve aşağıdaki kodu uygulayın:

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


Kodu kaydedip çalıştırın; kopyaladığınız sayfanın tüm HTML'sini Streamlit uygulamanızda şu şekilde görüntülemelisiniz:

Captcha ve IP Yasaklamaları Olan Web Sitelerini Atlatmak İçin Proxy Sağlayıcısı Kullanma

Artık bir web sitesinin HTML'sini geri alabilseniz de, yukarıdaki kod CAPTCHA meydan okumaları veya IP yasakları gibi gelişmiş anti-scraping mekanizmalarına sahip siteler için çalışmayabilir. Örneğin, Indeed veya Amazon gibi bir siteyi Selenium kullanarak kazımak, bir CAPTCHA sayfasının erişimi engellemesiyle sonuçlanabilir. Bunun nedeni, web sitesinin bir botun içeriğine erişmeye çalıştığını algılamasıdır. Bu davranış devam ederse, site sonunda IP adresinizi yasaklayabilir ve daha fazla erişimi engelleyebilir.


Güvenlik Kodu


Bunu düzeltmek için entegre edin Bright Data'nın Kazıma Tarayıcısı komut dosyanıza. Kazıma tarayıcısı, anti-kazıma savunmalarını aşmak için konut IP'leri de dahil olmak üzere birden fazla proxy ağını kullanan sağlam bir araçtır. Özel başlıkları, tarayıcı parmak izini, CAPTCHA çözümünü ve daha fazlasını yöneterek sayfaların engelini kaldırmayı halleder. Bu, içeriğe sorunsuz bir şekilde erişirken kazıma çabalarınızın algılanmamasını sağlar.

Bright Data'nın Scraping Browser'ını ücretsiz olarak kurma

  1. Kayıt olma — şuraya git Bright Data'nın ana sayfası ve " Ücretsiz Denemeye Başla "ya tıklayın. Bright Data'da zaten bir hesabınız varsa, sadece giriş yapabilirsiniz.

  2. Giriş yaptıktan sonra “ Proxy Ürünlerini Al ” butonuna tıklayın.


  3. Ekle ” butonuna tıklayın ve “ Scraping Browser ” seçeneğini seçin.


  4. Daha sonra, yeni kazıma tarayıcı proxy bölgeniz için bir ad seçmenizin isteneceği “ Bölge ekle ” sayfasına yönlendirileceksiniz. Bundan sonra, “ Ekle ”ye tıklayın.


  5. Bundan sonra proxy bölgenizin kimlik bilgileri oluşturulacaktır. Herhangi bir web sitesinde kullanılan herhangi bir anti-scraping mekanizmasını atlatmak için bu ayrıntılara betiğinizde ihtiyacınız olacak.


Ayrıca, tarama tarayıcısı hakkında daha fazla ayrıntı için Bright Data'nın geliştirici belgelerine de göz atabilirsiniz.


main.py dosyanızda kodu şu şekilde değiştirin. Bu kodun önceki koddan daha temiz ve kısa olduğunu fark edeceksiniz.


 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


<Kullanıcı adı> ve <şifre> ifadelerini tarayıcınızın kullanıcı adı ve şifresiyle değiştirin.

Dom içeriğini temizleme

Bir web sitesinin HTML içeriğini kazıdıktan sonra, genellikle JavaScript, CSS stilleri veya çıkardığınız temel bilgilere katkıda bulunmayan istenmeyen etiketler gibi gereksiz öğelerle doldurulur. Verileri daha yapılandırılmış ve daha fazla işleme için kullanışlı hale getirmek için, alakasız öğeleri kaldırarak ve metni düzenleyerek DOM içeriğini temizlemeniz gerekir.


Bu bölüm HTML içeriğinin nasıl temizleneceğini, anlamlı metnin nasıl çıkarılacağını ve alt akış işleme için daha küçük parçalara nasıl bölüneceğini açıklar. Temizleme süreci, doğal dil işleme veya içerik analizi gibi görevler için veri hazırlamak için önemlidir.

DOM İçeriğini Temizlemek İçin Kod Rehberi

DOM içeriğini temizlemek için main.py'ye eklenecek kod şu şekilde:


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


Kod Ne Yapar?

  1. Gövde İçeriğinin Çıkarılması:
    • extract_body_content fonksiyonu HTML'yi ayrıştırmak ve <body> etiketinin içeriğini çıkarmak için BeautifulSoup'u kullanır.
    • Eğer bir <body> etiketi varsa, fonksiyon bunu bir dize olarak döndürür. Aksi takdirde, boş bir dize döndürür.
  2. İçeriğin Temizlenmesi:
    • clean_body_content fonksiyonu, gereksiz öğeleri kaldırmak için çıkarılan içeriği işler:
      • JavaScript ve CSS'yi ortadan kaldırmak için <script> ve <style> etiketleri kaldırılmıştır.
      • Fonksiyon temizlenen içerikten düz metni alır.
      • Boş satırları ve gereksiz boşlukları silerek metni biçimlendirir.
  3. İçeriğin Bölünmesi:
    • split_dom_content fonksiyonu temizlenen içeriği alır ve varsayılan maksimum uzunluğu 5.000 karakter olan daha küçük parçalara böler.
    • Bu, özellikle token veya giriş boyutu sınırlamaları olan modellere veri aktarırken, büyük miktardaki metni yönetilebilir parçalar halinde işlemek için yararlıdır.


Değişikliklerinizi kaydedin ve uygulamanızı test edin. Bir web sitesini kazıdıktan sonra bunun gibi bir çıktı almalısınız.

Dom içeriğini Ollama'ya ayrıştırma

DOM içeriği temizlenip hazırlandıktan sonraki adım, belirli ayrıntıları çıkarmak için bilgileri ayrıştırmaktır. Olma , LangChain ile entegre edilmiş büyük bir dil modeli (LLM). Ollama, LLM'leri yerel olarak indirmek ve çalıştırmak için kullanılan bir CLI aracıdır. Ancak Ollama'yı kullanmadan önce aşağıdaki kurulumları yapmanız gerekir:


  • Eğer yapmadıysanız, Ollama'yı şu adresten indirin ve kurun: resmi web sitesi Mac'e Homebrew komutunu kullanarak kurabilirsiniz.

     brew install ollama
  • Sonra, herhangi bir modeli yükleyin bu liste ; Phi3, Mistral, Gemma 2, vb. gibi modeller var; her birinin kendine özgü sistem gereksinimleri var. Bu kod, hafif olduğu için esas olarak phi3'ü kullanıyor.

     ollama pull phi3


Kurulumdan sonra, LangChain'i kullanarak betiğinizdeki bu modeli çağırabilir ve ona gönderilecek verilerden anlamlı içgörüler elde edebilirsiniz.


DOM içeriğini phi3 modeline ayrıştırmak için işlevselliğin nasıl kurulacağı aşağıda açıklanmıştır

llm.py için kod incelemesi

Aşağıdaki kod, Ollama ile DOM parçalarını ayrıştırma ve ilgili ayrıntıları çıkarma mantığını uygular:

 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)

Kodun ne işe yaradığı.

  1. Talimat Şablonu:
    • Ollama'ya hangi bilgilerin çıkarılacağı konusunda kesin rehberlik sağlar.
    • Çıktının temiz, öz ve ayrıştırma açıklamasına uygun olmasını sağlar.
  2. Parça İşleme:
    • parse_with_ollama fonksiyonu DOM parçalarını yineleyerek her birini LLM ile işler.
    • Performansı optimize etmek için boş parçaları atlar.
  3. Hata İşleme:
    • Hataları zarif bir şekilde işler, kaydeder ve kalan parçaları işlemeye devam eder.

ui.py dosyasını güncelleme

Kullanıcıların LLM'ye ayrıştırma talimatları girmesine ve sonuçları görüntülemesine olanak tanımak için ui.py dosyasına aşağıdaki kodu ekleyin:

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

Kullanıcı Arayüzünde Nasıl Çalışır

  1. Kullanıcı Girişi:
    • Kullanıcı, çıkarılacak verilerin doğal dildeki açıklamasını metin alanına sağlar.
  2. Ayrıştırma Tetikleyicisi:
    • İçeriği Ayrıştır butonuna tıklandığında, temizlenen DOM içeriği yönetilebilir parçalara bölünür ve parse_with_ollama'ya geçirilir.
  3. Sonuç Gösterimi:
    • Ayrıştırılan sonuçlar bir metin alanında görüntülenir ve kullanıcıların çıkarılan bilgileri incelemesine olanak tanır.


Bunu yaptıktan sonra, kazıyıcı artık kazınan verilere dayanarak istemlerinize yanıtlar sağlayabilir.


Sırada ne var?

Web kazıma ve yapay zekanın birleşimi, veri odaklı içgörüler için heyecan verici olasılıklar sunar. Verileri toplamanın ve kaydetmenin ötesinde, artık kazınan verilerden içgörü elde etme sürecini optimize etmek için yapay zekadan yararlanabilirsiniz. Bu, pazarlama ve satış ekipleri, veri analizi, işletme sahipleri ve çok daha fazlası için faydalıdır.


AI kazıyıcı için tam kodu burada bulabilirsiniz. Denemekten ve benzersiz ihtiyaçlarınıza göre uyarlamaktan çekinmeyin. Katkılarınız da memnuniyetle karşılanır—geliştirme fikirleriniz varsa, bir çekme isteği oluşturmayı düşünün!


Bunu daha da ileri götürebilirsiniz. İşte bazı fikirler:

  • İstemlerle Deneyler Yapın: İstemlerinizi, belirli içgörüler elde edecek veya benzersiz proje gereksinimlerini karşılayacak şekilde uyarlayın.
  • Kullanıcı Arayüzü
  • Diğer LLM Modellerini Entegre Edin: Diğer dil modellerini keşfedin Açık AI , İkizler burcu , vb. kullanarak veri analizinizi daha da iyileştirebilirsiniz.