Web-scrape işlemi konusunda

xingax

Centipat
Katılım
10 Şubat 2020
Mesajlar
5
Merhaba arkadaşlar,

Google Chrome altyapısını kullanarak (nodejs+puppeteer) web scrape işlemi yapmaktayım. Web scrape işlemini otomatik site ziyareti gibi algılayabilirsiniz bilakis durum budur. Site ziyareti yapar gerekli siteyi görüntüler yazıları alır ve bunu karşılaştırır. Yazılara ulaşmak ve karşılaştırmak sorun değil aslında.

İlgili siteyi hızlı ziyaret etmesi,
Bu siteyi daha çok ziyaret etmesi (örneğin 1 kez ziyaret emri veriyorsam bunu 4-5'e katlamam gerekiyor ki veri kaybolmasın site ziyaretinde kendi isteğimi tanımalı ki gelen çıktıysa bende bilgileri kaydedeyim)

Kısaca gidişat şu şekilde: Google Chrome açar -> siteye gider - > kapanır.

Bunu en hızlı nasıl yapabilirim?

İşletim sistemi seçimi: Windows, Hackintosh, macOS, Linux.
Bellek,
CPU,
SSD.

Sizce bu işte en önemli donanımsal ya da yazılımsal unsur bu işi daha hızlı yapmak için ne yapmalıyım?

Nodejs + puppeteer kullanıyorum. Selenium gibi...
 
Son düzenleyen: Moderatör:
Amac veri cekmek ise neden browser kullanmadan basit bir script ile html parse yapmiyorsunuz?
En hizli scraping PEG Parser kullanilarak yapilir, 8000-9000 satirlik HTML ciktisini 1ms den kisa surede parse edebiliyorum i9 9900k uzerinde ( single thread ).
Sunucu 300ms'de cevap veriyor, parse zaten 1 ms bile surmuyor.

Ama context free grammar ile ugrasmak zorunda kalirsin ve bu kadar endustriyel bir yonteme gercekten ihtiyaciniz var mi tam emin degilim. Basit bir python scripti sizin isi gorur gibi anladim ben, browser engine'i ayaga kaldirmaniza gerek yok.

Internette bulabileceginiz cogu scraping toolu zaten PEG parser kullanmaz, request atar ve String manipulasyonu yapar.

Dogru sekilde buffer kullanirsan, cok az memory kullanarak parse yapabilirsin, amele gibi tum response u memory e alip parse edersen sorun cikarabilir gomulu sistemlerde ama cogu bilgisayarin tum bu hatalari hosgoruyle karsilayacak donanimi var artik.
 
Son düzenleme:
Amac veri cekmek ise neden browser kullanmadan basit bir script ile html parse yapmiyorsunuz?
En hizli scraping PEG Parser kullanilarak yapilir, 8000-9000 satirlik HTML ciktisini 1ms den kisa surede parse edebiliyorum i9 9900k uzerinde ( single thread ).
Sunucu 300ms'de cevap veriyor, parse zaten 1 ms bile surmuyor.

Ama context free grammar ile ugrasmak zorunda kalirsin ve bu kadar endustriyel bir yonteme gercekten ihtiyaciniz var mi tam emin degilim. Basit bir python scripti sizin isi gorur gibi anladim ben, browser engine'i ayaga kaldirmaniza gerek yok.

Internette bulabileceginiz cogu scraping toolu zaten PEG parser kullanmaz, request atar ve String manipulasyonu yapar.

Dogru sekilde buffer kullanirsan, cok az memory kullanarak parse yapabilirsin, amele gibi tum response u memory e alip parse edersen sorun cikarabilir gomulu sistemlerde ama cogu bilgisayarin tum bu hatalari hosgoruyle karsilayacak donanimi var artik.


Merhaba,

Öncelikle aktardığınız bilgiler için çok teşekkür ederim. Yeni bir şey daha öğrendim fakat benim için yararlı olur mu bilmiyorum. Çekilecek dataların Cookie ve Cache'lerinin de sürekli değişmesi gerekiyor. Yani sadece request atmakla o cookie ve cache'ler sunucu tarafında tekrar alınması için ne yapabilirim?

Bu şekilde verileri analiz ediyoruz tam teşekküllü bir scrape desek daha doğru olur sanırım.
Google Chrome açar -> siteye gider (cache ve cookie bilgilerini alır)- > kapanır.

Bir siteye git, cache ve cookie bilgileri al dosya olarak iki txt'de tut ve destroy et,
tekrardan ilgili siteye git cache ve cookie bilgilerini al dosya olarak iki txt'ye yazdır ve destroy et.

Bende bunun yapılabilecek ilk versiyonunun yönteminin selenium, geckofx puppeteer ile yapmaktan olduğunu fark ettim ama yeterince hızlı değil. C# ile kodladım, nodejs ile kodladım fakat ikisi de aynı sonuç zaten farklı bir sonuç beklenemezdi ama bir ihtimal işte bende bilgisayarın yavaş olduğu kanısına vardım çünkü bununla alakalı bir şeyler bilen kimse yok ya da ben bulamadım. Bu konu hakkında bir bilginiz var mı acaba? İnanın çok müteşekkir kalırım.
 
Merhaba,

Öncelikle aktardığınız bilgiler için çok teşekkür ederim. Yeni bir şey daha öğrendim fakat benim için yararlı olur mu bilmiyorum. Çekilecek dataların Cookie ve Cache'lerinin de sürekli değişmesi gerekiyor. Yani sadece request atmakla o cookie ve cache'ler sunucu tarafında tekrar alınması için ne yapabilirim?

Bu şekilde verileri analiz ediyoruz tam teşekküllü bir scrape desek daha doğru olur sanırım.
Google Chrome açar -> siteye gider (cache ve cookie bilgilerini alır)- > kapanır.

Bir siteye git, cache ve cookie bilgileri al dosya olarak iki txt'de tut ve destroy et,
tekrardan ilgili siteye git cache ve cookie bilgilerini al dosya olarak iki txt'ye yazdır ve destroy et.

Bende bunun yapılabilecek ilk versiyonunun yönteminin selenium, geckofx puppeteer ile yapmaktan olduğunu fark ettim ama yeterince hızlı değil. C# ile kodladım, nodejs ile kodladım fakat ikisi de aynı sonuç zaten farklı bir sonuç beklenemezdi ama bir ihtimal işte bende bilgisayarın yavaş olduğu kanısına vardım çünkü bununla alakalı bir şeyler bilen kimse yok ya da ben bulamadım. Bu konu hakkında bir bilginiz var mı acaba? İnanın çok müteşekkir kalırım.

Rica ederim, Java & Kotlin tarafinda Apache Httpclient var, session ve cookie bilgilerini tutuyor


Cok kapsamli bir client'tir, zaten ana sayfada feature listesinde "automatic cookie handling" var.

Ne kadar fazla bir yavasliktan bahsediyorsunuz? Benchmark yaptiniz mi? Sunucu gec cevap veriyor olmasin?

Bir de seyi anlamadim, cekilecek data , cookie ve cache surekli degisiyorsa aslinda sizin cookie tutmaniza da gerek yok ki? Cookie'yi bir yere yazip, sonra bir daha (cookie olmadan) mi istek atiyorsunuz?

Apache client kullanarak auto cookie handling yaparsiniz, gayet de hizlidir. Ama amac sadece cookie yi bir txt ye yazmaksa response header'dan bunu herhangi bir client ile okursunuz zaten. Cok cilgin bir yavaslik olmamasi gerekiyor, orta seviye bir bilgisayarda dahi saniyede onlarca request atabilir, cevap alabilir client'lar bunlar, bence sizin olayda baska bir sorun var.
 
Cookie'yi bir yere yazip, sonra bir daha (cookie olmadan) mi istek atiyorsunuz?

Yüksek ihtimalle böyle yapıyorum ondan dolayı request mantığında cookie çerezi işlenmiyor. Çerezi getiriyorum fakat hiç set edip request göndermiyordum.Sanırım site bazında işlenebilir request atamamamdaki sorun buydu bize ait olmayan bir site olduğu için :) Sanırım bu işe yarayacak sizce bundan mıdır? Gidişat get ettikten sonra set edip mi request atmaktan geçiyor?

Bunu deneyeceğim bugün cookie get ettikten sonra set edip istek atacağım umarım olur. Dediğiniz gibi tarayıcı ayağa kaldırıp 4-5 saniyede bir 1 adet scrape edebiliyorum. Ama get cookie ile cookie'leri çektiğimde 1 saniye kadar işe yararsa muazzam olacak


Veri çekmekte data çekmekte hiç sorun yaşamam o yüzden veri çekmekten ziyade şu cookie işini çözmek istiyorum şu çerez mantığına hiç vakıf değilim. Ziyaret bilgileri olduğunu biliyorum fakat nasıl get set edeceğimi ve nasıl oradaki değeri yenileyeceğim ve bunun işlenmesini sağlayacağım hakkında bir bilgim yok.

Çok değerli şeyler öğrendim ve inanın cevapladığınız saniyeden itibaren mesajınızı gördüm aktarmış olduğunuz terimleri okuyorum ve araştırıyorum o siteye giriyor bu siteye giriyor çok değişik şeyler öğreniyorum. Çok teşekkür ederim
 
Yüksek ihtimalle böyle yapıyorum ondan dolayı request mantığında cookie çerezi işlenmiyor. Çerezi getiriyorum fakat hiç set edip request göndermiyordum.Sanırım site bazında işlenebilir request atamamamdaki sorun buydu bize ait olmayan bir site olduğu için :) Sanırım bu işe yarayacak sizce bundan mıdır? Gidişat get ettikten sonra set edip mi request atmaktan geçiyor?

Bunu deneyeceğim bugün cookie get ettikten sonra set edip istek atacağım umarım olur. Dediğiniz gibi tarayıcı ayağa kaldırıp 4-5 saniyede bir 1 adet scrape edebiliyorum. Ama get cookie ile cookie'leri çektiğimde 1 saniye kadar işe yararsa muazzam olacak


Veri çekmekte data çekmekte hiç sorun yaşamam o yüzden veri çekmekten ziyade şu cookie işini çözmek istiyorum şu çerez mantığına hiç vakıf değilim. Ziyaret bilgileri olduğunu biliyorum fakat nasıl get set edeceğimi ve nasıl oradaki değeri yenileyeceğim ve bunun işlenmesini sağlayacağım hakkında bir bilgim yok.

Çok değerli şeyler öğrendim ve inanın cevapladığınız saniyeden itibaren mesajınızı gördüm aktarmış olduğunuz terimleri okuyorum ve araştırıyorum o siteye giriyor bu siteye giriyor çok değişik şeyler öğreniyorum. Çok teşekkür ederim

Rica ederim.
Cok basit aslinda

1. Request atacaksiniz, response gelecek.
2. Response icinde Header alaninda "Set-Cookie" altinda cookie bilgisi olacak. Bu bir nevi sunucunun browser'a "Al bu cookie leri set et, bir daha bana geldiginde bunlarla gel" demesi.
3. "2". adimdaki cookie leri, bu sefer request atarken Header icinde "Cookie" alaninda gondereceksiniz. Sunucu artik sizin 2. adimdaki kisi oldugunuzu biliyor.
4. Isiniz bitince Request icinde Cookie gondermeyi birakacaksiniz. Boylece sunucu yine sizi tanimamaya baslayacak ( ve "Set-Cookie" gondermeye devam edecek )

Boyle akis.
 
Uyarı! Bu konu 6 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Geri
Yukarı