XHR请求会提取大量HTML内容,我该如何废弃/抓取它?

问题描述 投票:0回答:2

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

我正在按照本教程关于删除无限滚动网页: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

我不确定如何浏览“视图”中的项目。我希望蜘蛛进入每个项目并为每个项目抓取一些信息。

在过去,我用正常的分页和xpath引导的规则成功完成了这项工作。

scrapy infinite-scroll
2个回答
0
投票

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

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

您可以在scrapy shell中尝试以下操作来获取“下一个”页面中的所有链接:

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()

1
投票

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

这是XHR网址。滚动页面时,每个请求将显示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]

将此网址传递给您的scrapy功能。

© www.soinside.com 2019 - 2024. All rights reserved.