2016-04-06 14 views
1

Bir yayından sonra bir div içinde metin seçmek istiyorum.Python Selenium Bir yayından sonra div'dan metin alma

Kaynak şuna benzer:

<div id="citation"> 
    <cite>Journal</cite> 
    ", " 
    <span class="year">2014</span> 
    ", " 
    <span class="volume">100</span> 
    " (4), pp 100-200" 
</div> 

Sadece "(4), pp 100-200" istiyorum.

Tüm boşluktan veya her bir yayından nasıl metin çıkacağını biliyorum, ancak yalnızca son metni nasıl alabilirim? Bu XPATH çalışmayacak. ISSUE_XPATH = "// * [id = \ @" "/ text() [3]

Ve bu hata mesajı gösterir atıf \]":

selenium.common.exceptions.InvalidSelectorException: Mesaj: {" errorMessage ":" xpath ifadesinin sonucu \ "// * [@ id = \" atıf \ "]/text() [3] \" is: [object Text]. Bir eleman olmalıdır. "

cevap

1

Ne yazık ki, //*[@id=\"citation\"]/text()[3] selenyumda çalışmayacak - yalnızca metin öğelerini değil, gerçek öğeleri hedefleyebilirsiniz.

from bs4 import BeautifulSoup 

citation = driver.find_element_by_id("citation") 
html = citation.get_attribute("outerHTML") 

soup = BeautifulSoup(html, "html.parser") 
desired_text = soup.find("span", class_="volume").next_sibling 
print(desired_text) 
+0

Teşekkür: Ben bu durumda ne yapardı

ayrıca class="volume" ile span öğeden sonra belirli bir metin kardeş bulmak için yardımcı olacağını BeautifulSoup HTML ayrıştırıcı kullanmaktır! Bu kodu denedim, ancak bu hatayı alıyorum: 'AttributeError: 'NoneType' nesnesinin 'next_sibling' özelliği yoktur, neden emin değilim. – moglido

+0

@moglido 'html'yi yazdırırsanız ne alırsınız? Teşekkürler. – alecxe

+0

baskı html, yukarıdaki div'dan html verir. Ancak, terminal çıkışındaki metin etrafında tırnak işareti yoktur. – moglido

İlgili konular