【问题标题】:scrapy downloads the html page but could get data using xpaths or cssscrapy 下载 html 页面,但可以使用 xpaths 或 css 获取数据
【发布时间】:2017-11-07 17:01:00
【问题描述】:

我正在尝试抓取这个page,当我执行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 读取它。我不明白这种行为。

【问题讨论】:

  • 我们没有得到页面源中的值,意味着数据是动态加载的。所以你必须使用像splash、selenium这样的包来获取动态加载的数据。

标签: scrapy scrapy-shell


【解决方案1】:

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

当您在浏览器中打开 HTML 时,JavaScript 不会将内容从单独的 URL 或 JavaScript 中的硬编码值加载到 DOM 中,这就是您可以使用 @ 查看内容的原因987654321@.

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多