2015-08-07 28 views
5

Bir sözcük bir HTML sayfasının metninde yer alıyorsa ve doğru değilse false döndüren bir boolean işlevi yapmam gerekiyor.HTML sayfasındaki sözcüğü bul hızlı algoritma

lxml kitaplığına sahip sözcüğü bulana kadar tüm sayfa ağacını analiz etmenin kolay olduğunu biliyorum, ancak tüm html bloklarını yinelemek ve sözcük olup olmadığını bulmak için verimsiz buluyorum.

Daha hızlı bir algoritma önerisi (Bu aramayı birçok kez yapmam gerekiyor)?

+0

Sözcük birçok sayfada mı yoksa pek çok sözcük için kullanılan sayfalarda mı kullanılıyor? – Shadowen

+2

Gelecek sorularınız için pro-ipucu: Sorunuzu, çalıştığınız dilin adıyla etiketlediğinizden emin olun. Lxml kitaplığından bahsettiğinizden beri Python'u kullandığınızdan emin oldum, ancak sorunuzu "python" olarak etiketlediyseniz Çok sayıda usta Pythonistas tarafından görülmüştü. –

+1

Soruyu yazdığımda unuttum. Üzgünüm ve bahşiş için teşekkürler! – arodriguezdonaire

cevap

3

Bir öğe özniteliğinde veya bir şeyde yanlışlıkla kelime bulma konusunda endişelenmediğiniz sürece (ve bununla ilgili endişeleriniz varsa, HTML'yi lxml gibi bir şeyle ayrıştırmak tek seçeneğinizdir), yalnızca büyük bir dize olarak tüm HTML belgesini tedavi etmek ve onun içine kelimeyi aramak:

var markup = document.documentElement.innerHTML; 

ve sonra bir kullanmak:

def checkForWord(): 
    r = requests.get("http://example.com/somepage.html") 
    return "myWord" in r.text 
+0

Bu benim için mükemmel çalışıyor, teşekkürler! Eğer daha iyi bir cevap görünmüyorsa çözüm olarak etiketleyeceğim :) – arodriguezdonaire

+2

Not: Python 2.x için r.text'de u "Rodr \ xedguez" gibi bir şey olması gerektiğini unutmayın. ASCII olmayan karakterler doğru bir şekilde - 'r.text'' unicode'u döndürür, bu nedenle arama teriminin unicode olması gerekir. –

0

Ben bir dize olarak sayfanın tamamını almak istiyorum dize içinde dize aramak için yöntem:

var n = markup.search("YourString"); 

Eşleşme dizini için bir sayı veya eşleşme bulunamazsa -1 değerini alırsınız.

+1

[lxml] (http://lxml.de/) bir Python kitaplığı olduğu için, JavaScript yerine Python kullandığından emin olun. –

+1

Haklı olabilirsiniz, soruda bahsetmediniz ve bir python sorusu olarak etiketlenmediler. İyi dedektif çalışma;) – Matt

+0

Rahatsızlık için özür dilerim, Python kullanıyorum – arodriguezdonaire