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

时间:2019-02-23 22:16:57

标签: scrapy infinite-scroll

因此,我正在尝试通过无限滚动方式抓取网站。

我正在关注有关剪贴无限滚动网页的本教程: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指导的规则成功完成了此操作。

2 个答案:

答案 0 :(得分: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]

将此URL传递到您的抓狂功能。

答案 1 :(得分: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()