首页 > 解决方案 > R - 当 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 正文部分提交填充的表单?

标签: htmlrvest

解决方案


查找和替换有问题的项目可以解决问题:

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

推荐阅读