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 对象,其中包含您想要的数据。
每个页面的 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()
所以,我正在尝试抓取一个无限滚动的网站。
我正在学习这个关于抓取无限滚动网页的教程: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 引导的规则成功地做到了这一点。
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()