2016-08-02 68 views
1

有人可以幫助我解壓縮之後的測試,我想提取發件人名稱。它位於em標籤的外面。我正在使用python BeautifulSoup包。如何使用rvest包中的<tag>提取文本R

這裏是一個網頁的鏈接:http://seclists.org/fulldisclosure/2016/Jan/0

我能提取電子郵件標題成功既然是在一個標籤。在html頁面中沒有其他div或類。

這是網頁的HTML代碼: HTML Snippet

這裏是我試過

url <- "http://seclists.org/fulldisclosure/2016/Jan/0" 
doc <- htmlTreeParse(url, useInternalNodes = T, trim = T,  addAttributeNamespaces = T, encoding = "utf-8") 

pre_text1 <- unlist(xpathSApply(doc, "//em",xmlValue)) 

回答

1

您可以通過以下xpath

require(rvest) 
doc <- read_html("http://seclists.org/fulldisclosure/2016/Jan/0") 
doc %>% 
    html_node(xpath = "/html/body/table[2]//tr[1]/td[2]/table//tr/td/text()[6]") %>% 
    html_text 

結果提取它: : Uğur Cihan KOÇ <u.cihan.koc() gmail com>

我是如何到達那裏的?
enter image description here 從Chrome開始 - >右鍵單擊文本元素 - >複製 - >複製XPath。 不知何故,沒有「複製選擇器」。所以我想你不能通過一個純粹的CSS選擇器來訪問這個元素。

此XPath如下所示:

/html/body/table[2]/tbody/tr[1]/td[2]/table/tbody/tr/td/text()[1] 

Rvest不會與這個XPath返回任何元素。不知何故tbody-部分是不承認(不知道爲什麼)。將其切出並放下拖尾[1]

/html/body/table[2]//tr[1]/td[2]/table//tr/td/text() 

爲您提供所需的結果。然後,您可以通過像我一樣添加[6]來選擇xpath中的第6個元素,或者在R中篩選。

+0

你怎麼知道這是第六個元素?有沒有辦法遍歷返回的所有元素? –

+0

'doc%>%html_nodes(xpath =「/ html/body/table [2] // tr [1]/td [2]/table // tr/td/text()」)'。去'html_nodes'而不是'html_node'並放下'[6]' – Rentrop

相關問題