所以,我正在尝试用无限滚动来抓取一个网站。
我正在按照本教程关于删除无限滚动网页:https://blog.scrapinghub.com/2016/06/22/scrapy-tips-from-the-pros-june-2016
但是给出的示例看起来非常简单,它是一个有序的JSON对象,包含您想要的数据。
每个页面的XHR响应很奇怪,看起来像损坏的HTML代码This is how the Network tab looks
我不确定如何浏览“视图”中的项目。我希望蜘蛛进入每个项目并为每个项目抓取一些信息。
在过去,我用正常的分页和xpath引导的规则成功完成了这项工作。
它没有损坏的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()
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功能。