使用wget
我下载了这个网页:
使用命令:
RobWebsiteAddress="https://www.walmart.ca/en/ip/Dispenser-Set-Tumbler-Organizer-Bathroom-Bin-Holder-Bathroom-Containers-Soap-Set-Accessories-Travel-6Pcs-Accessory-Ejoyous-Dish-Toothbrush/PRD4406MV3EZF75"
DownloadName="Ejoyous1"
wget -O- -q --user-agent=AGENT "$RobWebAddress" > "$DownloadName"
当我尝试打开其中的文件时,gedit
它变得疯狂。
当我使用:
grep -i 23.31 Ejoyous1 | wc
0 0 0
价格没找到。如果我grep
在这个词上price
得到一长行的 146,329 个字符,这可能是让我gedit
发疯的原因:
$ grep -i price Ejoyous1 | wc
1 6292 146329
.5 MB 文件中有一些提示:
$ grep -i necolas Ejoyous1
/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */
如您所知,这是来自沃尔玛的网站。只需下载网页并使用它,我就可以毫无问题地获得 Costco 的定价和 Ikea 的定价wget
。我也没有问题查看从 Costco 或 Ikea 下载的文件gedit
。
如果它是 HTML 的衍生物,我该如何解释这种语言?我应该使用什么工具?有什么线索可以走上正确的道路吗?
价格信息通过使用 API 和 json 的 js 脚本显示在网页中
这就是为什么网页的源代码中不存在价格文本的原因
浏览器 Web 开发工具将显示价格以及更多库存信息来自json 响应https://www.walmart.ca/api/product-page/price-offer
由于此类过程可以通过身份验证和 cookie 得到保护,并且由于 wget 和 curl 无法下载 json 文件,因此一个想法是注册并使用 Wallmart API
https://developer.walmart.com/
但似乎该 API 是针对合作伙伴供应商的
另一个想法是反转公共网页构建过程以发送格式良好的 API 请求......
许多页面从主页(从一个单独的“文件”)单独下载内容,因此在您下载的文件中没有任何内容可以使用
wget
. Firefox 运行 javascript,允许它下载内容。您可以按 (Ctrl+Shift+C) 来查看 JavaScript 控制台。单击“网络”,然后重新加载页面以查看它正在建立的连接。其中一个连接是json
名为 price-offer 的“文件”。如果您能够找出内容所在的位置,就有可能获取数据。否则,您必须像 Firefox 一样执行 javascript。但是,它并不像提供 URL 那样简单。您还必须将数据发送到服务器以获取所需的信息。(API cmak.fr 描述了.)
这是有效的,因为浏览器会在保存页面之前将额外信息(来自
json
)添加到页面中。要跳过手动单击 GUI,您可以使用 Chromium 下载页面。(也可以使用 Firefox,但看起来更复杂 - MDN Headless Mode。)然后
grep
价格: