dl
/dt
/dd
「HTMLクリエイターが私たちにこれを行うのはなぜですか」というものです。
library(rvest)
library(tidyverse)
pg <- read_html("http://www.presidencia.pt/?idc=11&fano=2016")
# grab ALL the dt/dd elements under each dl into one big node list
entries <- html_nodes(pg, xpath=".//dl[@id='ms_agend3']/*")
# this finds all of the "dt" elements
starts <- which(xml_name(entries) == "dt")
# this tells us where ^^ "dd"'s stop
ends <- c(starts[-1]-1, length(entries))
# it took 30s for me, so progress bars make the time pass visually
pb <- progress_estimated(length(starts))
# now we iterate over the start/end pairs
map2_df(starts, ends, ~{
pb$tick()$print() # tick off the progress bar
# we're only going to work on the part of the node list for this dt/dd set
start <- .x
end <- .y
# get the day
dt <- html_text(entries[start], trim=TRUE)
# now iterate over each associated dd and pull out the info
map_df((start+1):end, ~{
data_frame(
hour = html_text(html_node(entries[.x], "div.hora"), trim=TRUE),
text = html_text(html_node(entries[.x], "div.texto"), trim=TRUE),
)
}) %>%
mutate(day = dt) # add the day in
}) %>%
select(day, hour, text) -> agenda # rearrange and store
それはそれは、データフレームを作る方法による遅い少しだけど、それは私が前提と情報提供しているか、空白の時間を含む議題の日/時間/テキストを(キャプチャします。このSHLDは何をしたいあなたを得ます終日のイベント)。
この:
pb <- progress_estimated(length(starts))
map2_df(starts, ends, ~{
pb$tick()$print()
start <- .x
end <- .y
data_frame(
hour = html_text(html_nodes(entries[(start+1):end], "div.hora"), trim=TRUE),
text = html_text(html_nodes(entries[(start+1):end], "div.texto"), trim=TRUE),
day = html_text(entries[start], trim=TRUE)
)
}) %>%
select(day, hour, text) -> agenda
は少し速くなると限り、私の目が私に言うのと同じ結果が得られます。
URLを共有していないと、違法行為または非倫理的行為を行っていることを示すことができないか、内部ページです。後者は理解できる、前者は理解できない。 HTMLの再現可能なスニペットを提供していません(コンテンツを持たない '
ああ、申し訳ありません...私はポルトガル共和国の大統領の議題のためにデータを見ています。議題はここにあります:http://www.presidencia.pt/?idc=11&fano=2016 –