Dinamik Web Sitelerinde Web Kazıma İçin Python ve Güzel Çorbayı Kullanmayı Öğrenmek

Dinamik Web Sitelerinde Web Kazıma İçin Python ve Güzel Çorbayı Kullanmayı Öğrenmek
Web scraping

E-Ticaret Sitelerinde Web Scraping Zorluklarının Üstesinden Gelmek

Web kazıma, özellikle süreçte yeni olduğunuzda, hem heyecan verici hem de göz korkutucu olabilir. Dinamik bir web sitesini kazımaya yönelik ilk girişimimi hâlâ hatırlıyorum; buzlu camın arkasından kitap okumaya çalışmak gibiydi. Beautiful Soup gibi platformlarda olasılıklar sonsuzdur ancak karmaşık HTML yapılarında gezinmek gibi zorluklar sabrınızı sınayabilir. 🧑‍💻

Bu senaryoda, bir e-ticaret web sitesinden veri çıkarmaya çalışıyorsunuz ancak HTML öğeleri anlaşılması zor görünüyor. Şu anda ilgilendiğiniz web sitesi gibi birçok web sitesi, belirli öğelerin yerini bulmayı zorlaştıran iç içe geçmiş yapılar veya dinamik içerik kullanır. Bu, özellikle Python ve Beautiful Soup gibi araçlara yeni başladığınızda sinir bozucu olabilir.

Ama endişelenmeyin; Her başarılı web kazıyıcı bir zamanlar aynı engelle mücadele etmiştir. HTML yapısını analiz etmeyi, kalıpları tanımlamayı ve seçicilerinizi hassaslaştırmayı öğrenmek, kazıma dünyasında bir geçiş törenidir. Kalıcılık ve birkaç denenmiş ve doğru teknikle, en karmaşık HTML'de bile gezinme sanatında kısa sürede ustalaşacaksınız.

Bu makalede, HTML'de verimli bir şekilde gezinmek ve ihtiyacınız olan öğeleri tam olarak çıkarmak için pratik stratejileri keşfedeceğiz. Etiketleri anlamaktan geliştirici araçlarıyla çalışmaya kadar bu bilgiler sizi başarıya hazırlayacak. Hadi dalalım! 🌟

Emretmek Kullanım Örneği
find_all HTML belgesindeki belirli bir HTML etiketinin veya sınıfının tüm örneklerini almak için kullanılır. Örneğin, çorba.find_all("div", class_="productContainer") sayfadaki tüm ürün kapsayıcılarını alır.
requests.get Belirli bir URL'nin ham HTML içeriğini getirmek için bir HTTP GET isteğinde bulunur. Örnek: Response = request.get(url), ayrıştırılmak üzere sayfa HTML'sini alır.
BeautifulSoup HTML ayrıştırıcısını başlatır. Örnek: çorba = BeautifulSoup(response.content, "html.parser") HTML içeriğini daha sonraki işlemler için hazırlar.
find_element Sayfadaki tek bir öğeyi bulmak için Selenyum ile birlikte kullanılır. Örnek:product.find_element(By.CLASS_NAME, "name") ürün adını alır.
find_elements Find_element'e benzer ancak eşleşen tüm öğeleri alır. Örnek: Driver.find_elements(By.CLASS_NAME, "productContainer") yineleme için tüm ürün kapsayıcılarını getirir.
By.CLASS_NAME Öğeleri sınıf adlarına göre tanımlamaya yönelik bir Selenyum bulma stratejisi. Örnek: By.CLASS_NAME, "fiyat" belirtilen sınıfa sahip öğeleri bulur.
assertGreater Bir değerin diğerinden büyük olduğunu doğrulamak için birim testlerinde kullanılır. Örnek: self.assertGreater(len(product_boxes), 0), kazıma sırasında ürünlerin bulunmasını sağlar.
ChromeDriverManager Selenium için Chrome WebDriver'ın indirilmesini ve kurulumunu otomatik olarak yönetir. Örnek: sürücü = webdriver.Chrome(service=Service(ChromeDriverManager().install()))).
text Bir HTML öğesinin metin içeriğini alır. Örnek: başlık = ürün.find("div", class_="name").text, bir ürünün adına ilişkin görünür metni çıkarır.
unittest.TestCase Test senaryolarını tanımlamak için kullanılan Python'un en test modülünden bir sınıf. Örnek: class TestWebScraper(unittest.TestCase) kazıyıcı için bir test paketi oluşturur.

Web Kazıma Çözümlerinin Parçalanması

İlk senaryonun avantajları Sağlanan e-ticaret sitesinden veri çıkarmak için HTML ayrıştırmaya yönelik popüler bir Python kütüphanesi. kullanarak ham HTML'yi getirerek çalışır. kütüphane ve ardından Beautiful Soup's ile ayrıştırma . HTML ayrıştırıldıktan sonra komut dosyası, etiketleri ve sınıf adlarını kullanarak belirli öğeleri tanımlar. ürünKonteyner, ürün ayrıntılarını sardığı varsayılır. Bu yaklaşım statik HTML için etkilidir ancak web sitesi JavaScript tarafından oluşturulan dinamik içerik kullanıyorsa sorun yaşayabilir. Dinamik bir tarif web sitesinde benzer sorunlarla uğraştığımı hatırlıyorum; her şey doğru görünüyordu, ancak hiçbir veri ortaya çıkmadı! 🧑‍💻

İkinci senaryoda, devreye giriyor. Bu araç özellikle JavaScript aracılığıyla yüklenen içeriğe sahip siteler için kullanışlıdır. Selenium, gerçek bir tarayıcı oturumu başlatarak siteyle etkileşimde bulunan bir kullanıcının simülasyonunu yapar. Bu, tüm öğelerin yüklenmesini beklemesine ve ardından gerekli verileri çıkarmasına olanak tanır. Örneğin, sınıf tabanlı bulucuları kullanarak ürün ayrıntılarını bulur. . Selenyum güçlü yetenekler sunsa da, tarayıcı oturumundan çıkmayı hatırlamak gibi dikkatli bir kaynak yönetimi gerektirir; aksi takdirde, gece geç saatlerde yapılan bir hata ayıklama oturumunda dizüstü bilgisayarım donduğunda öğrendiğim gibi, aşırı bellek tüketebilir! 🖥️

Bu komut dosyalarının bir diğer önemli özelliği, farklı kullanım durumlarına uyarlanmalarını kolaylaştıran modüler tasarımlarıdır. Python'u kullanan birim test betiği framework, kazıma mantığındaki her fonksiyonun doğru şekilde çalışmasını sağlar. Ürün kaplarının bulunduğunu ve başlıkların ve fiyatların çıkarıldığını doğrular. Web siteleri sıklıkla yapılarını güncellediğinden, değişiklikleri kazırken güvenilirliği korumak açısından bu özellikle önemlidir. Bir keresinde, bir blog sitesini incelerken bu tür testlerin önemini fark ettim; bir hafta işe yarayan şey ertesi hafta bozuldu ve testler beni saatlerce sorun giderme zahmetinden kurtardı.

Bu komut dosyaları aynı zamanda optimizasyon ve yeniden kullanılabilirlik göz önünde bulundurularak oluşturulmuştur. HTML getirme ve öğe ayrıştırma gibi yeniden kullanılabilir işlevleri izole ederek, aynı sitedeki diğer sayfaları veya kategorileri küçük ayarlamalarla yönetebilirler. Bu modülerlik, kazıma projesinin genişletilmesinin yönetilebilir kalmasını sağlar. Genel olarak, Güzel Çorba ve Selenyum'u birleştirmek, hem statik hem de dinamik içerik kazımanın etkili bir şekilde üstesinden gelmenizi sağlar. Sabır ve pratikle web kazıma, sinir bozucu bir görevden veri toplama için ödüllendirici bir araca dönüşür. 🌟

Beautiful Soup Kullanarak E-Ticaret Sitelerinden Veri Çıkarma

HTML ayrıştırma ve web kazıma için Python ve Beautiful Soup kütüphanesini kullanma

from bs4 import BeautifulSoup
import requests

# URL of the target page
url = "https://www.noon.com/uae-en/sports-and-outdoors/exercise-and-fitness/yoga-16328/"

# Make a GET request to fetch the raw HTML content
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")

# Find all product boxes
product_boxes = soup.find_all("div", class_="productContainer")

for product in product_boxes:
    # Extract the title
    title = product.find("div", class_="name").text if product.find("div", class_="name") else "No title"
    # Extract the price
    price = product.find("div", class_="price").text if product.find("div", class_="price") else "No price"
    print(f"Product: {title}, Price: {price}")

Selenyum ile Dinamik İçerik Kazıma

JavaScript ile oluşturulan içeriği işlemek için Python'u Selenium ile kullanma

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

# Set up Selenium WebDriver
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
url = "https://www.noon.com/uae-en/sports-and-outdoors/exercise-and-fitness/yoga-16328/"
driver.get(url)

# Wait for the products to load
products = driver.find_elements(By.CLASS_NAME, "productContainer")

for product in products:
    try:
        title = product.find_element(By.CLASS_NAME, "name").text
        price = product.find_element(By.CLASS_NAME, "price").text
        print(f"Product: {title}, Price: {price}")
    except:
        print("Error extracting product details")

driver.quit()

Güzel Çorba Kazıyıcı için Birim Testleri

Kazıma mantığını doğrulamak için Python'un en küçük modülünü kullanma

import unittest
from bs4 import BeautifulSoup
import requests

class TestWebScraper(unittest.TestCase):
    def setUp(self):
        url = "https://www.noon.com/uae-en/sports-and-outdoors/exercise-and-fitness/yoga-16328/"
        response = requests.get(url)
        self.soup = BeautifulSoup(response.content, "html.parser")

    def test_product_extraction(self):
        product_boxes = self.soup.find_all("div", class_="productContainer")
        self.assertGreater(len(product_boxes), 0, "No products found")

    def test_title_extraction(self):
        first_product = self.soup.find("div", class_="productContainer")
        title = first_product.find("div", class_="name").text if first_product.find("div", class_="name") else None
        self.assertIsNotNone(title, "Title not extracted")

if __name__ == "__main__":
    unittest.main()

Web Scraping'de İleri Teknikleri Keşfetmek

Web kazıma için karmaşık web siteleriyle uğraşırken dikkate alınması gereken önemli bir husus, dinamik içeriğin işlenmesidir. Birçok modern web sitesi, ilk HTML teslim edildikten sonra öğeleri yüklemek için JavaScript'e güvenir. Bu, aşağıdaki gibi araçlar anlamına gelir: Yalnızca statik HTML'yi ayrıştıran , gerekli tüm verileri yakalayamayabilir. Bu gibi durumlarda, gibi bir tarayıcı otomasyon aracını entegre etmek vazgeçilmez hale gelir. Selenium, web sitesiyle tıpkı gerçek bir kullanıcı gibi etkileşime girebilir, öğelerin yüklenmesini bekleyebilir ve buna göre verileri çıkarabilir. Bu, özellikle anahtar öğeleri eşzamansız olarak işleyen siteleri kazırken kullanışlıdır. 🌐

Bir diğer önemli husus, web sitesinin yapısı ve temel API'sidir. Bazı web siteleri, içeriği dinamik olarak yüklemek için kullanılan yapılandırılmış bir API uç noktasını kullanıma sunar. Ağ etkinliğini geliştirici araçları aracılığıyla inceleyerek, çıkarılmasının HTML'den daha kolay olan JSON verilerini keşfedebilirsiniz. Örneğin, ürün ayrıntıları için birden fazla iç içe geçmiş etiketi ayrıştırmak yerine temiz, yapılandırılmış veriler içeren JSON nesnelerini doğrudan getirebilirsiniz. Bu yöntem daha hızlıdır, daha güvenilirdir ve gereksiz sunucu isteklerini azaltır. Gibi kütüphaneleri kullanma veya API etkileşimi için performansı optimize etmek için mükemmel bir yaklaşımdır.

Son olarak etik kazıma uygulamaları ve web sitesinin hizmet şartlarına uygunluk göz ardı edilemez. Robots.txt dosyasına saygı göstermek, kısıtlama yoluyla aşırı sunucu yükünden kaçınmak ve gerçek bir kullanıcıyı taklit edecek üstbilgiler kullanmak en iyi temel uygulamalardır. İstekler arasına gecikmeler eklemek veya aşağıdaki gibi kitaplıkları kullanmak veya , sorunsuz çalışmayı sağlar. Web kazımaya ilk başladığımda, bu yönergeleri göz ardı ettim ve bunun sonucunda IP adresim engellendi; bu, unutmayacağım bir ders! Verimli ve sorumlu veri toplamayı sağlamak için her zaman bu faktörleri göz önünde bulundurun. 🌟

  1. Python'da HTML'yi ayrıştırmak için en iyi kütüphane nedir?
  2. Statik bir web sayfasındaki öğeleri bulmak için kullanımı kolay yöntemler sunan, HTML ayrıştırmaya yönelik en popüler kitaplıklardan biridir.
  3. JavaScript tarafından oluşturulan içeriği nasıl kazıyabilirim?
  4. Gibi araçları kullanabilirsiniz Kullanıcı etkileşimlerini simüle edebilen ve öğelerin tarayıcıya dinamik olarak yüklenmesini bekleyebilen.
  5. Kazıma için doğru HTML öğelerini nasıl tanımlarım?
  6. Tarayıcınızın geliştirici araçlarını kullanarak şunları inceleyebilirsiniz: ve ihtiyacınız olan öğelere karşılık gelen etiketleri, kimlikleri veya sınıf adlarını tanımlayın.
  7. HTML'yi ayrıştırmadan verileri kazımak mümkün mü?
  8. Evet, web sitesinin bir API'si varsa aşağıdaki gibi kütüphaneleri kullanarak doğrudan yapılandırılmış veriler talep edebilirsiniz: veya .
  9. Kazıma sırasında tıkanmayı nasıl önleyebilirim?
  10. Gibi başlıkları kullanın gerçek kullanıcıları taklit etmek, istekler arasına gecikmeler eklemek ve sitenin robots.txt dosyasına saygı göstermek.

Web kazıma, verileri verimli bir şekilde toplamak için önemli bir beceridir, ancak yaklaşımınızı web sitesinin yapısına uyacak şekilde uyarlamayı gerektirir. Birleştirerek HTML ayrıştırma ve dinamik sayfalara yönelik Selenium gibi araçlar için veri çıkarmadaki birçok yaygın engelin üstesinden gelebilirsiniz.

Hedef sitenin JavaScript oluşturma veya API uç noktaları gibi nüanslarını anlamak başarı için çok önemlidir. Engellenmeyi önlemek için her zaman isteklerin kısıtlanması gibi etik uygulamaları takip edin. Kalıcılık ve doğru araçlarla, karmaşık kazıma projeleri bile yönetilebilir ve ödüllendirici hale gelebilir. 🚀

  1. için resmi belgeler Güzel Çorba HTML ve XML belgelerini ayrıştırmak için kullanılan bir Python kitaplığı.
  2. Kılavuzlar ve en iyi uygulamalar Selenyum Belgeleri Dinamik içerik için tarayıcı işlemlerinin otomatikleştirilmesine ilişkin bilgiler sağlayan.
  3. Noon’dan İçgörüler e-ticaret platformu , bu web kazıma görevi için hedeflenen belirli web sitesi.
  4. Topluluk sitesinden Python isteklerini ve API işlemeyi kullanma teknikleri Gerçek Python .
  5. Kaynaklı ek stratejiler ve etik kazıma uygulamaları Veri Bilimine Doğru .