Rvest слом получить пустую таблицу - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь использовать много способов, чтобы удалить следующую таблицу с веб-сайта https://f3.vietstock.vn/APC/tai-chinh.htm?tab=KQKD

enter image description here

Я исследую xpath таблицы: // * [@ id = "finance-content"] / div / div / div [4] / div / table. Поэтому я использую код ниже

require(rvest)
require(XML)                                                  
require(RCurl)

doc<-read_html('https://f3.vietstock.vn/APC/tai-chinh.htm?tab=KQKD')

Data_table <- doc %>%
  html_nodes(xpath ='//*[@id="finance-content"]/div/div/div[4]/div/table') %>%
  html_table()

Однако я получил пусто для Data_table.

1 Ответ

0 голосов
/ 11 ноября 2018

Используйте Developer Tools в своем браузере, и вы увидите, что сайт использует много XHR-запросов (это тема широко , охватываемая SO, что означает, что исследования были минимальными на этот вопрос).

enter image description here

У выделенного есть данные, которые составляют таблицу.

Если вы переключитесь на «Заголовки» из «Ответа», вы увидите, что XHR выполняется через POST запрос:

enter image description here

это означает, что простой jsonlite::fromJSON() не будет работать с URL.

Я использовал пакет curlconverter для автоматического создания функции запроса для этого. Щелкните правой кнопкой мыши на выделенной строке слева и выберите «Копировать как cURL», затем следуйте указаниям на README и страницах справочника в curlconverter (также есть много SO ответов, использующих curlconverter в аналогичном контекст, так что, опять же, практически не нужно никаких исследований).

httr::POST(
  url = "https://f3.vietstock.vn/data/financeinfo",
  body = list(
    Code = "APC", 
    ReportType = "KQKD",
    ReportTermType = "2", 
    Unit = "1000000",
    Page = "1", 
    PageSize = "4"
  ),
  encode = "form"
) -> res

dat <- httr::content(res)

str(dat[[2]][[1]][[1]])
## List of 25
##  $ ID                   : int 1
##  $ ReportNormID         : int 2206
##  $ Name                 : chr "1. Doanh thu bán hàng và cung cấp dịch vụ "
##  $ NameEn               : chr "1. Revenue"
##  $ NameMobile           : chr "1. Doanh thu bán hàng và cung cấp dịch vụ "
##  $ NameMobileEn         : chr "1. Revenue"
##  $ CssStyle             : chr "NormalB"
##  $ Padding              : chr "Padding1"
##  $ ParentReportNormID   : int 2216
##  $ ReportComponentName  : chr "Kết quả kinh doanh"
##  $ ReportComponentNameEn: chr "Income Statement"
##  $ Unit                 : NULL
##  $ UnitEn               : NULL
##  $ OrderType            : NULL
##  $ OrderingComponent    : NULL
##  $ RowNumber            : NULL
##  $ ReportComponentTypeID: NULL
##  $ ChildTotal           : int 0
##  $ Levels               : int 0
##  $ Value1               : num 46365
##  $ Value2               : num 45103
##  $ Value3               : num 34182
##  $ Value4               : num 45497
##  $ Vl                   : NULL
##  $ IsShowData           : logi TRUE

Остальные элементы вложенного списка вы можете найти самостоятельно.

...