python - Scrapy Splash 无法获取 React 站点的数据
问题描述
我需要刮掉这个网站。是用 React 制作的,所以看起来。然后我尝试用scrapy-splash提取数据。例如,我需要带有 class 的“a”元素shelf-product-name
。但响应是一个空数组。我wait
在大约 5 秒内使用了这个论点。但我只得到一个空数组。
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,因为所有必需的数据都存储在<script>
原始 html 响应的标签内作为 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()
推荐阅读
- c++ - 为 C++03 编译器编写部分 unique_ptr,该编译器使用较新的编译器在通用代码库上运行
- sql - PostgresSQL 更改另一个用户拥有的表的权限
- c++ - 找不到 linux/sched/types.h(适用于 RT 补丁的 Linux 内核)
- r - 如何将结果列绑定到 for 循环中的数据框?
- function - Clojurescript 与 Reagent,检测组件功能使组件不断重新渲染随机生成的道具
- swift - swift中UIBezierPath的内存泄漏
- r - 如何从 R 中的函数生成等高线图?
- html - 在模态显示之前横幅开始
- javascript - 如何在 chome 扩展中的选项卡之间发送选项卡数据?
- bash - 使用 bash `find` 使用文件夹名称重命名文件