2016-04-06 101 views
1

我想在跨度後選擇div內的文本。Python Selenium跨度後如何從div中獲取文本

來源是這樣的:

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

我只想要 「(4),100-200頁」。

我知道如何從整個div或每個跨度中獲取文本,但我如何只抓取最後一個文本?這個XPATH不起作用。 ISSUE_XPATH = 「// * [@ ID = \」 的引證\ 「] /文本()[3]」

並且示出此錯誤消息:

selenium.common.exceptions.InvalidSelectorException:消息:{」 errorMessage「:」xpath expression \「的結果// * [@ id = \」citation \「]/text()[3] \」是:[object Text]。它應該是一個元素。

回答

1

不幸的是,//*[@id=\"citation\"]/text()[3]不會在硒工作 - 你只能針對實際的元素,而不是文本節點。

我想在這種情況下,做的是另外使用BeautifulSoup HTML解析器,這將有助於在span元素之後找到一個特定的文本兄弟與class="volume"

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

謝謝!我試過這個代碼,但我一直得到這個錯誤:'AttributeError:'NoneType'對象沒有'next_sibling''屬性我不知道爲什麼。 – moglido

+0

@moglido如果你打印'html',你會得到什麼?謝謝。 – alecxe

+0

打印HTML給我從上面的div的HTML。但是,終端輸出中的文本週圍沒有引號。 – moglido

相關問題