R-当html结束标记放置在错误的位置时使用rvest

时间:2019-03-18 02:16:03

标签: html rvest

我正在尝试使用登录名抓取网站。使用rvest代码可以很容易地做到这一点:

url <- "https://badsite.com/users/login"
pgsession <- html_session(url)
pgform <- html_form(read_html(pgsession))[[1]] 
filled_form <- set_values(pgform, email="*****", password="*****")
submit_form(pgsession, filled_form)

但是,目标网页的结构不良,并且在错误的位置有一个html结束标记</html>,看起来像这样:

<html>
  <head>
    <meta charset="utf-8">
    ...
  </head>
</html>
  <body>
   <div class="container" id="Login_page">
   ...
     <form method="post" action="."><input type='hidden' ...
   ...
   </div>
  </body>

我对rvest(v0.3.2)的使用目前导致...

Error in html_form(read_html(pgsession))[[1]] : subscript out of bounds

...我将其放入未读取的完整html文件中。

如何使用R代码优雅地忽略过早的结束标记,并从否则为html正文部分提交已填写的表格?

1 个答案:

答案 0 :(得分:0)

找到并替换有问题的项可以解决问题:

pgsession$response$content <- charToRaw(gsub("<!-- <!","\n</html><!-- <!",(gsub("\n</html>","",httr::content(pgsession$response, as="text")))))