3

我正在尝试抓取此页面,当我这样做时scrapy shell "https://redsea.com/en/apple-iphone-x-64gb-silver.html",它会下载 html 页面,我可以view(response)在浏览器中查看下载的 html: 在此处输入图像描述 在此处输入图像描述

但是,当我尝试获取任何数据产品名称时,例如,response.css('.page-title')它给了我空的响应: 在此处输入图像描述

使用scrapy抓取使用rest-api获取数据的网站只是下载没有数据的网站结构html,并且scrapy无法获取该数据是有道理的。但在这种情况下,scrapy 会下载带有数据的 html 文件,但无法使用 css 或 xpaths 读取它。我不明白这种行为。

4

1 回答 1

2

但在这种情况下,scrapy 会下载带有数据的 html 文件,但无法使用 css 或 xpaths 读取它。

它不会,当您在浏览器中打开 HTML 时,JavaScript 会将内容从单独的 URL 或 JavaScript 中的硬编码值加载到 DOM 中,这就是为什么您可以使用view(response).

如果您检查实际的 HTML 内容(例如,在浏览器中打开页面源,Ctrl+U在 Firefox 中),您会发现您想要的数据要么根本不存在,要么不在<script/>元素内。

打开 Web 浏览器的开发人员工具的网络选项卡,强制重新加载页面(Ctrl+Shift+R在 Firefox 中)并观察在后台执行的其他请求,其中一个可能具有所需的数据。

然后,您可以让 Scrapy 执行类似于在后台发出的请求的请求。

于 2019-02-07T10:11:06.413 回答