İçindekiler
Web Kazıma Nedir?
Web kazıma, web sitelerinden bilgi çıkarmak için otomatik komut dosyaları kullanma işlemidir. Bu teknik genellikle veri toplama, pazar araştırması ve içerik toplama için kullanılır. Web kazıma ile manuel olarak toplanması sıkıcı olabilecek büyük miktarlardaki verilerin çıkarılmasını otomatikleştirebilirsiniz.
Sonsuz Kaydırmayı Anlamak
Sonsuz kaydırma, kullanıcı sayfayı aşağı kaydırdıkça yeni içeriğin otomatik olarak yüklendiği bir web tasarım tekniğidir. Bu yöntem, sayfalar arasında gezinmeye gerek kalmadan sürekli olarak yeni içerik sağlayarak kullanıcı deneyimini geliştirir. Bununla birlikte, bu dinamik yükleme, web kazıma için zorluklar yaratır çünkü geleneksel yöntemler tüm içeriği yakalayamayabilir.
İhtiyacınız Olan Araçlar
Web sitelerini sonsuz kaydırmayla kazımak için aşağıdaki araçlara ihtiyacınız olacak:
- Python: Web kazımada yaygın olarak kullanılan çok yönlü bir programlama dili.
- Selenyum: Web sayfalarıyla tıpkı bir insan kullanıcı gibi etkileşim kurabilen bir tarayıcı otomasyon aracı.
- GüzelÇorba: HTML ve XML belgelerini ayrıştırmaya yönelik bir Python kitaplığı.
- Pandalar: Kazınmış verileri depolamak ve yönetmek için bir veri işleme kitaplığı.
Tablo: Gerekli Araçlar
Alet | Tanım |
---|---|
Python | Komut dosyaları yazmak için programlama dili. |
Selenyum | Tarayıcıların web sayfalarıyla etkileşim kurmasını otomatikleştirir. |
GüzelÇorba | Bilgi çıkarmak için HTML ve XML belgelerini ayrıştırır. |
Pandalar | Veri çerçevelerindeki verileri yönetir ve yönetir. |
Ortamınızı Kurma
Başlamadan önce gerekli kütüphaneleri kurmanız gerekir. Terminalinizi veya komut isteminizi açın ve aşağıdaki komutları çalıştırın:
pip selenyum güzelsoup4 pandaları yükleyin
Ayrıca Selenium'un Chrome tarayıcısını kontrol etmesi için gerekli olan ChromeDriver'ı da indirmeniz gerekecektir. ChromeDriver sürümünün tarayıcı sürümünüzle eşleştiğinden emin olun.
Senaryoyu Yazmak
Burada, sonsuz kaydırmayla bir web sitesini kazıyan bir komut dosyası yazmaya yönelik adım adım bir kılavuz bulunmaktadır.
Web Sürücüsünü Başlatın
Selenium'u Chrome tarayıcısını başsız modda çalıştıracak şekilde ayarlayarak başlayın. Bu, betiğin bir tarayıcı penceresi açmadan çalışmasına olanak tanıyarak onu daha hızlı ve daha verimli hale getirir.
selenium'dan içe aktar selenium.webdriver.chrome.service'den web sürücüsünü içe aktar Selenium.webdriver.chrome.options'dan hizmet içe aktar Seçenekler chrome_options = Options() chrome_options.add_argument("--headless") service = Service('path_to_chromedriver') sürücü = webdriver.Chrome(hizmet=hizmet, seçenekler=chrome_options) Driver.get("https://example.com")
Sayfayı Kaydırın
Tüm içerik yüklenene kadar sayfayı kaydırmak için bir işlev oluşturun. Bu işlev, aşağı kaydırmak için JavaScript'i kullanır ve yeni içeriğin yüklenmesine izin vermek için duraklar.
içe aktarma süresi def Scroll_page(): SCROLL_PAUSE_TIME = 2 last_height = Driver.execute_script("return document.body.scrollHeight") while True: Driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") zamanı. uyku(SCROLL_PAUSE_TIME) new_height = Driver.execute_script("return document.body.scrollHeight") if new_height == last_height: break last_height = new_height Scroll_page()
HTML'yi ayrıştır
Selenium tarafından yüklenen HTML içeriğini ayrıştırmak için BeautifulSoup'u kullanın. Gerekli veri öğelerini sayfadan çıkarın.
BS4'ten import BeautifulSoup çorba = BeautifulSoup(driver.page_source, "html.parser") veri = [] öğeler = çorba.find_all("div", class_="item-class") öğelerdeki öğe için: başlık = item.find ("h2").text.strip() açıklama = item.find("p").text.strip() data.append([başlık, açıklama])
Kazınmış Verilerin Saklanması
Çıkarılan verileri bir DataFrame'de depolamak için Pandas'ı kullanın ve ardından bunu bir CSV dosyasına kaydedin.
pandaları pd olarak içe aktar df = pd.DataFrame(data, sütunlar=["Başlık", "Açıklama"]) df.to_csv("scraped_data.csv", index=False)
Komut Dosyasını Tamamla
Tüm adımları birleştirerek, bir web sitesini sonsuz kaydırmayla kazımaya yönelik tam komut dosyasını burada bulabilirsiniz:
selenium'dan web sürücüsünü içe aktar Selenium.webdriver.chrome.service'den içe aktarma Selenium.webdriver.chrome.options'dan hizmet içe aktarma BS4'ten içe aktarma Seçenekleri BeautifulSoup'u içe aktarma süresi pandaları pd olarak içe aktar chrome_options = Options() chrome_options.add_argument("--headless") hizmeti = Hizmet('path_to_chromedriver') sürücü = webdriver.Chrome(hizmet=hizmet, seçenekler=chrome_options) Driver.get("https://example.com") def Scroll_page(): SCROLL_PAUSE_TIME = 2 last_height = Driver.execute_script( "return document.body.scrollHeight") while True: Driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(SCROLL_PAUSE_TIME) new_height = Driver.execute_script("return document.body. ScrollHeight") if new_height == last_height: break last_height = new_height Scroll_page() çorba = BeautifulSoup(driver.page_source, "html.parser") veri = [] items = çorba.find_all("div", class_="item-class) ") öğelerdeki öğe için: title = item.find("h2").text.strip() açıklama = item.find("p").text.strip() data.append([başlık, açıklama]) sürücü .quit() df = pd.DataFrame(data, sütunlar=["Başlık", "Açıklama"]) df.to_csv("scraped_data.csv", index=False) print("Kazıma tamamlandı ve veriler scraped_data.csv dosyasına kaydedildi ")
Ortak Zorluklar ve Çözümler
Dinamik İçeriği Yönetme
JavaScript aracılığıyla yüklenen dinamik içeriğin kazınması zor olabilir. Kaydırma işlevindeki duraklatma süresini ayarlayarak tüm içeriğin tam olarak yüklendiğinden emin olun. Bazen ek içerik yüklemek için öğelerle etkileşime girmeniz gerekebilir (örneğin, "Daha fazla yükle" düğmelerini tıklamanız).
Kazımaya Karşı Önlemlerle Başa Çıkmak
Web siteleri CAPTCHA, IP engelleme ve hız sınırlama gibi kazımayı önleyici önlemler uygulayabilir. Bunları atlamak için:
- IP engellemesini önlemek için proxy kullanın.
- İnsan davranışını taklit etmek için istekler arasında gecikmeler uygulayın.
- Algılamayı önlemek için kullanıcı aracılarını döndürün.
Veri Doğruluğunun Sağlanması
Doğru ve eksiksiz olduğundan emin olmak için kazınmış verileri her zaman doğrulayın. Eksik veya yinelenen verileri işlemek için veri temizleme tekniklerini kullanın.
Web Scraping'de Etik Hususlar
Web kazıma güçlü bir araç olsa da etik sonuçları dikkate almak önemlidir:
- Hizmet Şartlarına Saygı Gösterin: Kazımadan önce daima web sitesinin hizmet şartlarını kontrol edin.
- Sunucuların Aşırı Yüklenmesinden Kaçının: Çok agresif bir şekilde kazıma yapmak sunucuların aşırı yüklenmesine neden olabilir. Uygun gecikmeleri kullanın ve kısa sürede büyük miktarda verinin kazınmasını önleyin.
- Veri gizliliği: Kişisel verileri izinsiz kazımadığınızdan emin olun.
Çözüm
Web sitelerini sonsuz kaydırmayla kazımak zor olabilir ancak doğru araç ve tekniklerle bu başarılabilir. Dinamik içeriği işlemek için Selenium'u ve HTML'yi ayrıştırmak için BeautifulSoup'u kullanarak, ihtiyacınız olan verileri verimli bir şekilde toplayabilirsiniz. Etik yönergelere uymayı ve dinamik içerik ile kazımayı önleme önlemlerini uygun şekilde ele almayı unutmayın.
Bu kılavuzu takip ederek, sonsuz kaydırma ile web sitelerini kazımak ve ihtiyaçlarınız için değerli verileri çıkarmak için iyi donanıma sahip olmalısınız.