![使用 wget 保存带有脚本的网页](https://linux22.com/image/1535667/%E4%BD%BF%E7%94%A8%20wget%20%E4%BF%9D%E5%AD%98%E5%B8%A6%E6%9C%89%E8%84%9A%E6%9C%AC%E7%9A%84%E7%BD%91%E9%A1%B5.png)
有谁知道怎样用 wget 用脚本保存网页吗?或者要用什么参数才能实现?
该网页包含脚本,似乎只有 Chrome 中的 SingleFile Core 扩展才能保存所有内容属性。Firefox 无法保存表格内容,Chrome 内置保存功能将卡住并显示结果页面的“请等待”消息。
页面上的其他部分并不重要,只有表格中的内容才重要,所以我决定找到一种方法来做到这一点,但是花了一个小时来分析源代码并从f12开发人员工具中查看信息,却找不到一种方法来仅保存表格的内容。
以下是网页:http://m.marine.gov.mo/seawayScheduled/RealTimeSailing.aspx?type=dataDepartureXML&local=PE&lang=ENG
谢谢您的帮助!
答案1
答案是:
wget --header 'Content-type: application/json' --header 'Cookie: ASP.NET_SessionId=1bsq4nw4nj30groly5pv5zt3' --post-data='{"local":"PE","type":"dataDepartureXML"}' 'http://m.marine.gov.mo/seawayScheduled/RealTimeSailing.aspx/GetData'
其中“ASP.NET....”位是 cookie,不幸的是它是强制性的。当您检索主页时会发送此 cookie。因此,您必须使用两个命令进行稍微不同的操作:
获取主页并丢弃它(但将 cookie 保留在 cookie.txt 中):
wget --keep-session-cookies --save-cookies cookie.txt 'http://m.marine.gov.mo/seawayScheduled/RealTimeSailing.aspx?type=dataDepartureXML&local=PE&lang=ENG' -O /dev/null
获取数据并发送 cookie:
wget --load-cookies cookie.txt --header 'Content-type: application/json' --post-data='{"local":"PE","type":"dataDepartureXML"}' 'http://m.marine.gov.mo/seawayScheduled/RealTimeSailing.aspx/GetData' -O data.json
您获得的数据是一个包含两个字符串元素的 JSON 数组,这些字符串元素是原始 HTML。特殊字符(引号、括号……)被转义,因此结果的可读性不强,但使用编辑器进行一些全局更改即可轻松清理。