html - 如何自动下载网页 HTML?拒绝访问
问题描述
curl
我已经在 Mac 命令行 ( , wget
) 和 R ( rvest
, download
, ) 中尝试了各种实用程序来获得Chrome 中RCurl
的等价物。File > Save Page As ... > Webpage, Complete
所有这些实用程序都做了一些事情,但它们都不会产生与 Chrome 中的菜单驱动方法相同的结果,它确实从网页中捕获了我需要的所有信息。我需要为很多很多网页下载和解析 HTML。
我不确定我要下载的网页是否有什么特别之处,或者我只是没有使用正确的实用程序。我经常被拒绝访问。
解决方案
事实证明,我试图抓取的网站在许多已知的类似抓取工具的方法下拒绝访问。感谢 dash-o 将我指向无头 Chrome。使用无头,您可以自动下载包含所有相关信息的 DOM。但是,可以通过用户代理检测到 headless。您所要做的就是将标准浏览器用户代理作为参数传递给无头 Chrome 以欺骗标准浏览器:
chrome --headless --dump-dom --user-agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.50 Safari/537.36" https:// ...
有关更多详细信息,请参阅这些:
https ://intoli.com/blog/making-chrome-headless-undetectable/
https://developers.google.com/web/updates/2017/04/headless-chrome#printing_the_dom
推荐阅读
- go - 为什么我不能使用 net.go 的 conn.ok()?
- jenkins - 詹金斯停止所有正在运行/待定的作业构建
- sql - 如何随机显示具有特定值的表中的数据
- c# - 如何根据动态参数数量过滤查询
- apache-spark - 排除 kubernetes 删除的 pod
- sql - 有重复组时选择最后一组的第一条记录
- javascript - 无法解析 Firebase 网址。请使用 https://
.firebaseio.com - python - 使用 cv2.putText() 将文本放在循环之外
- python - Django:如何将字节对象保存到models.FileField?
- c++ - 我可以在联合中声明运算符吗?