![](/img/trans.png)
[英]Remove a node from a network without affecting the interaction of others nodes
[英]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.