簡體   English   中英

從一組節點中刪除特定的 html 節點

[英]Remove a specific html node from a set of nodes

我想從 R 中的https://paidabribe.com/reports/paid中抓取報告。除了一些報告包含報告下的嵌入元素之外,我的以下代碼一切正常,這是報告文本的 CSS 節點的一部分.

例如https://paidabribe.com/reports/paid?page=10有一個嵌入的文本“如何獲得液化石油氣連接”。

因此,根據帶有嵌入元素的報告的數量,我最終會為不同的頁面使用不同長度的字符向量。 我的問題是如何刪除節點的這個特定元素並只抓取報告的文本

SelectorGadget 告訴我這個節點可以通過使用“em”來調用。 所以我嘗試了以下方法:

#DO NOT RUN
scraper <- function(pages){
bribe <- read_html(paste("http://ipaidabribe.com/reports/paid?page", pages, sep = "=")) 
bribe <- bribe %>% html_nodes("em") 
bribe <- xml_remove(bribe)
all.nodes <- c(".paid-amount span", ".date", ".location", ".transaction a", ".body-copy-lg")
map(all.nodes, ~ html_nodes(bribe, .x) %>% html_text())
}

pages <- seq(10, 50, by = 10)
bribe.test <- map(pages,~scraper(.x))

這里的問題似乎是無法使用節點“em”選擇嵌入的文本。 那么如何刪除這個嵌入式節點。

MWE(生成抓取內容的列表。正如您所看到的,報告的向量有時與其他字符向量相比在長度上有所不同。:

scraper <- function(pages){
bribe <- read_html(paste("http://ipaidabribe.com/reports/paid?page", pages, sep = "=")) 
all.nodes <- c(".paid-amount span", ".date", ".location", ".transaction a", ".body-copy-lg")
map(all.nodes, ~ html_nodes(bribe, .x) %>% html_text())
}

pages <- seq(10, 50, by = 10)
bribe.test <- map(pages,~scraper(.x)) 
```R

不幸的是,僅僅刪除節點似乎還不夠,因為它的文本似乎在其父節點中被復制。

您可以做的是將空白內容寫入節點,然后從答案中去除空文本字符串。

scraper <- function(pages)
{
    bribe <- read_html(paste("http://ipaidabribe.com/reports/paid?page", pages, sep = "="))
    bribe <- xml_children(bribe)
    ems <- html_nodes(bribe, "em")
    xml_text(ems) <- ""
    all.nodes <- c(".paid-amount span", ".date", ".location", ".transaction a",
                    ".body-copy-lg")
    map(all.nodes, ~ html_nodes(bribe, .x) %>% 
                     html_text() %>% 
                     {grep("[[:alnum:]]", ., value = T)})
}

pages <- seq(10, 50, by = 10)
bribe.test <- map(pages,~scraper(.x))

這給出了一個沒有<em>標記內容的文本列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM