Rselenium和rvest的R网页抓取



我需要废弃这个网页,所以我可以有这样一个data.frame:

value01     value02                                             id
SECTION I   LIVE ANIMALS     ANIMAL PRODUCTS                    sectionI
CHAPTER 1   LIVE ANIMALS                                        chap0100000000
0101        Live horses, asses, mules and hinnies :   (TN701)   0101000000-1
- Horses :                                          0101210000-2
0101 21     -  - Pure-bred breeding animals  (NC018)            0101210000-80
0101 29     -  - Other :                                        0101290000-3
0101 29 10  -  -  - For slaughter                               0101291000-80
0101 29 90  -  -  - Other                                       0101299000-80
0101 30     - Asses                                             0101300000-80

要获取value01和value02的前两行,我使用:

unlist((remDr$getPageSource()[[1]] %>%  read_html(encoding = 'UTF-8') %>% html_elements('.section') %>% html_table())[2])
unlist((remDr$getPageSource()[[1]] %>%  read_html(encoding = 'UTF-8') %>% html_elements('.chapter') %>% html_table())[2])

为了获得value01和value02的其余值,我使用(我需要在使用此代码获得它们后清理获得的值,但我认为有更好的方法来获取数据):

remDr$getPageSource()[[1]] %>% read_html() %>% html_element(xpath = '//*[@id="div_description"]') %>% html_table()

所以我现在的问题是得到我想要的data.frame的id列,并把它们放在一起。关于如何从这里开始实现我的目标,有什么建议吗?


运行上述示例所需的代码:

suppressMessages(suppressWarnings(library(RSelenium)))
suppressMessages(suppressWarnings(library(rvest)))
rD <- rsDriver(browser = 'firefox', port = 6000L, verbose = FALSE)
remDr <- rD[['client']]
remDr$navigate('https://ec.europa.eu/taxation_customs/dds2/taric/measures.jsp?Lang=en&Domain=TARIC&Offset=0&ShowMatchingGoods=false&callbackuri=CBU-1&SimDate=20220719')

我不太清楚你想从那个页面上抓取什么,但这就是你如何获得我认为你想要的数据。

pg <- remDr$getPageSource()[[1]]
doc <- xml2::read_html(pg)
# first two lines
rvest::html_elements(doc, '#sectionI table , .chapter') |> 
rvest::html_table()
# get the data from each further line
lines <- rvest::html_elements(doc, ".evenLine")
data <- rvest::html_table(lines)
ids <- rvest::html_attrs(lines) |> sapply(function(x) x[1])

您需要根据自己的喜好清理抓取的数据。

如果这不是你想要的,你应该进一步澄清你的问题。