因此,我正在尝试通过无限滚动方式抓取网站。
我正在关注有关剪贴无限滚动网页的本教程:https://blog.scrapinghub.com/2016/06/22/scrapy-tips-from-the-pros-june-2016
但是给出的示例看起来非常简单,它是一个包含所需数据的有序JSON对象。
每个页面的XHR响应都很奇怪,看起来像损坏的html代码 This is how the Network tab looks
我不确定如何浏览“视图”中的项目。我希望蜘蛛输入每个项目并为每个项目抓取一些信息。
过去,我已经通过正常的分页和xpaths指导的规则成功完成了此操作。
答案 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()