XHR 请求拉取了很多 HTML 内容,我该如何抓取 it/crawl 呢?

XHR request pulls a lot of HTML content, how can I scrape it/crawl it?

所以,我正在尝试抓取一个无限滚动的网站。

我正在学习这个关于抓取无限滚动网页的教程:https://blog.scrapinghub.com/2016/06/22/scrapy-tips-from-the-pros-june-2016

但是给出的示例看起来很简单,它是一个有序的 JSON 对象,其中包含您想要的数据。

我想刮这个https://www.bahiablancapropiedades.com/buscar#/terrenos/venta/bahia-blanca/todos-los-barrios/rango-min=50.000,rango-max=350.000

每个页面的 XHR 响应都很奇怪,看起来像是损坏的 html 代码 This is how the Network tab looks

我不确定如何在“视图”中导航项目。我想让蜘蛛进入每个项目并为每个项目爬取一些信息。

过去,我使用正常的分页和由 xpaths 引导的规则成功地做到了这一点。

https://www.bahiablancapropiedades.com/buscar/resultados/0

这是 XHR url。 滚动页面时,每个请求将显示 8 条记录。 所以做一件事获取所有记录的 XPath。这些记录除以 8。它会出现 XHR 请求的计数。 做下面的过程。你的问题会解决。我遇到了和我一样的问题。我应用了以下逻辑。它会解决的。

pagination_count = xpath of presented number

value = int(pagination_count) / 8

for pagination_value in value:
   url = https://www.bahiablancapropiedades.com/buscar/resultados/+[pagination_value]

将此 url 传递给您的 scrapy 函数。

它没有损坏 HTML,它被转义以防止它破坏 JSON。一些网站将 return 简单的 JSON 数据,而其他网站(如本网站)将 return 实际 HTML 添加。

要获取元素,您需要从 JSON 响应中获取 HTML 并创建您自己的 parsel Selector(这与您在使用 response.css(...)).

您可以在 scrapy shell 中尝试以下操作以获取 "next" 页面之一中的所有链接:

scrapy shell https://www.bahiablancapropiedades.com/buscar/resultados/3

import json
import parsel

json_data = json.loads(response.text)
sel = parsel.Selector(json_data['view']) # view contains the HTML
sel.css('a::attr(href)').getall()