html - 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 正文部分提交填充的表单?
解决方案
查找和替换有问题的项目可以解决问题:
pgsession$response$content <- charToRaw(gsub("<!-- <!","\n</html><!-- <!",(gsub("\n</html>","",httr::content(pgsession$response, as="text")))))
推荐阅读
- jenkins - Jenkins 不执行 Jenkinsfile 中的步骤
- java - Android资源ID前的美元符号是什么意思
- redis - redis集群上的任务队列
- css - 带有表格的响应式下拉菜单
- node.js - 如何使用 firebase admin sdk 删除 Firebase Storage 中的文件
- android - 自动接收 OTP 并验证 OTP,UI 未更新
- php - 我无法使用 PHP 程序更新 MySQL 数据库中的所有数据
- r - 存在 NA 时将数据从一列移动到另一列
- python - 如何计算数据框中所有等于条件的选定单词?
- reactjs - 与动态变量链接