2015-11-29 36 views
5

Selenium ile yapılmış bir miktar web kazıma yapıyorum (bu yüzden bunun kullanımı söz konusu değil). Bir elemanı tanımlamak zorunda kaldığımda (yani: bir src özniteliği almak için) Selenium iç seçim motorunu kullanmalı mıyım yoksa Jsoup'u kullanmalı mıyım (ki bu çok daha kolay). Yani soru şu: Jsoup'un kullanımı bu kadar önemli bir performans mı? Selenyum mümkün olduğunca sık kullanmalı mıyım? TeşekkürlerSelenium vs Jsoup performansı

cevap

7

DOM'in önceden JSoup'a ayrıştırılmış olması durumunda, JSoup kullanmasını öneriyorum. Bir "yaşayan" DOM ​​ile uğraşmak zorunda olmadığından selenyumdan çok daha hızlıdır. Selenyum, her zaman herhangi bir işlem yapmadan önce eleman tutamaçlarının hala geçerli olup olmadığını kontrol etmelidir.

Eğer yapabiliyorsanız, selenyumdan tamamen kaçınabilirsiniz, çünkü ciddi kazıma yaparken havai yükü gerçekten farkedilebilir. Ancak, içeriğiniz istemcide JavaScript tarafından dinamik olarak oluşturulmuşsa, Selenium parlar. JavaScript yürütmediğinden JSoup bunu başaramaz.

Zeyilname yolla

Kısa cevap cevap: Duruma göre!

Daha uzun: Kazıma yaptığınız web sitesi javascript tarafından üretiliyorsa ve jenerasyondan sonra değişmiyorsa, özellikle DOM karmaşıksa ve JSoup okumaya uzun sürebilirse, selenyum ile ona erişmek çok iyi olur. JSoup oldukça hızlı olmasına rağmen. Bununla birlikte, JSoup DOM'ı tekrar bellekte oluşturacaktır, bu yüzden DOM'nız çok büyükse, sadece selenyumda değil, aynı zamanda JSoup'ta da bellek tüketen bir şekilde olacaksınız. Bu sizin durumunuzda bir sorun olabilir veya olmayabilir, ancak akılda tutulmaya değer.

Benim kişisel deneyimlerimden, son HTML'yi aldıktan ve bunu tekrar JSoup'de ayrıştırdıktan sonra mümkün olan en kısa sürede selenyum işlemini öldürürüm, çünkü dediğiniz gibi: Jsoup kazıma işlemi, ilgili selenyum seçici yapılardan çok daha kolay İlk oluşturma işleminden sonra DOM'taki herhangi bir değişikliğin kazıma işleminizle alakasız olduğundan eminseniz.

+2

Javascript tarafından dinamik olarak oluşturulan içerik nedeniyle Selenyum'a ihtiyacım var. Benim sorum şu oldu: Selenium ile sayfayı ayrıştırdıktan sonra sayfayı aldım, Selenium ile öğeleri ayrıştırmalı mıyım yoksa Jsoup için bir Belge Nesnesi mi oluşturmalıyım? Cevap için teşekkürler! – Fxxxx

+0

Bunun gibi bir şey kullanmayı düşünüyorum ** Document doc = Jsoup.parse (webDriver.getPageSource()); **. _Selenium WebElements_ üzerinde döngü yapan bazı performans sorunlarıyla uğraşıyorum, benzer bir çözüm uyguladınız mı? Performans sorunlarınızı çözdü mü? – Hoper

+0

@Hoper Yine, buna bağlı. HTML'yi iki kez etkin bir şekilde ayırmak bazı ek yükleri getirir. Selenium WebElements üzerindeki döngü genişse, yine de faydalı olabilir. Özellikle, DOM, WebElements üzerinden dönerken değişirse, zamanlama sorunlarına hızlı bir şekilde girersiniz. Her iki varyantı programlamak gerçekten zor olmadığından, sonuçları ölçmeniz ve daha hızlı bir çözümle devam etmeniz gerekebilir. – luksch