Scrapy Splash 无法获取 React 站点的数据
Scrapy Splash cannot get the data of a React site
我需要抓取 this 网站。
是用 React 制作的,所以看起来。然后我尝试用 scrapy-splash 提取数据。例如,我需要带有 class shelf-product-name
的“a”元素。但响应是一个空数组。我在大约 5 秒内使用了 wait
参数。
但我只得到一个空数组。
def start_requests(self):
yield SplashRequest(
url='https://www.jumbo.cl/lacteos-y-bebidas-vegetales/leches-blancas?page=6',
callback=self.parse,
args={'wait':5}
)
def parse(self,response):
print(response.css("a.shelf-product-name"))
实际上不需要使用 Scrapy Splash,因为所有必需的数据都存储在原始 html 响应的 <script>
标签内作为 json 格式化数据:
import scrapy
from scrapy.crawler import CrawlerProcess
import json
class JumboCLSpider(scrapy.Spider):
name = "JumboCl"
start_urls = ["https://www.jumbo.cl/lacteos-y-bebidas-vegetales/leches-blancas?page=6"]
def parse(self,response):
script = [script for script in response.css("script::text") if "window.__renderData" in script.extract()]
if script:
script = script[0]
data = script.extract().split("window.__renderData = ")[-1]
json_data = json.loads(data[:-1])
for plp in json_data["plp"]["plp_products"]:
for product in plp["data"]:
#yield {"productName":product["productName"]} # data from css: a.shelf-product-name
yield product
if __name__ == "__main__":
c = CrawlerProcess({'USER_AGENT':'Mozilla/5.0'})
c.crawl(JumboCLSpider)
c.start()
我需要抓取 this 网站。
是用 React 制作的,所以看起来。然后我尝试用 scrapy-splash 提取数据。例如,我需要带有 class shelf-product-name
的“a”元素。但响应是一个空数组。我在大约 5 秒内使用了 wait
参数。
但我只得到一个空数组。
def start_requests(self):
yield SplashRequest(
url='https://www.jumbo.cl/lacteos-y-bebidas-vegetales/leches-blancas?page=6',
callback=self.parse,
args={'wait':5}
)
def parse(self,response):
print(response.css("a.shelf-product-name"))
实际上不需要使用 Scrapy Splash,因为所有必需的数据都存储在原始 html 响应的 <script>
标签内作为 json 格式化数据:
import scrapy
from scrapy.crawler import CrawlerProcess
import json
class JumboCLSpider(scrapy.Spider):
name = "JumboCl"
start_urls = ["https://www.jumbo.cl/lacteos-y-bebidas-vegetales/leches-blancas?page=6"]
def parse(self,response):
script = [script for script in response.css("script::text") if "window.__renderData" in script.extract()]
if script:
script = script[0]
data = script.extract().split("window.__renderData = ")[-1]
json_data = json.loads(data[:-1])
for plp in json_data["plp"]["plp_products"]:
for product in plp["data"]:
#yield {"productName":product["productName"]} # data from css: a.shelf-product-name
yield product
if __name__ == "__main__":
c = CrawlerProcess({'USER_AGENT':'Mozilla/5.0'})
c.crawl(JumboCLSpider)
c.start()