【问题标题】:Best approach to scrape dynamic website(built using react) using python scrapy使用 python scrapy 抓取动态网站(使用反应构建)的最佳方法
【发布时间】:2020-07-16 08:47:54
【问题描述】:

我一直在尝试使用 scrapy 和 scrapy-splash 抓取这个网站 Link。据我所知,这个网站是在反应中开发的。 response.xpath 总是返回带有任何类名的空列表。请建议我一种方法来抓取这个反应网站。我已经使用这个link 设置了splash,并且能够在同一个项目中抓取一些其他网站,但无法抓取这个反应制作的网站。蜘蛛的代码如下:

import scrapy
from scrapy_splash import SplashRequest

class NykaaFashionbrandsSpider(scrapy.Spider):
    name = 'nykaa_fashionbrands'

    start_urls = ["https://www.nykaafashion.com/"]
    custom_settings = {
        'FEED_FORMAT': 'csv',
        'FEED_URI': 'fashion_brands.csv'
    }

    def start_requests(self):
        for url in self.start_urls:
            yield SplashRequest(url, self.parse,
                                endpoint='render.html',
                                args={'wait': 3},
                                )

    def parse(self, response):
        print(response.xpath('//*[@class="br-inner"]/ul/li/text()').extract())
        # I am trying to get the list items

【问题讨论】:

  • 你能提供一个最小的可重现代码示例吗?

标签: web-scraping scrapy scrapy-splash


【解决方案1】:

如果您需要抓取特定类别中的所有产品或产品,您可以使用如下 API url:

https://www.nykaafashion.com/rest/appapi/V2/categories/products?categoryId=6151&PageSize=12&sort=popularity&currentPage=2&filter_format=v2

这条回复:

"products": [
            {
                "sku": "CTWK0648",
                "imageUrl": "https://adn-static1.nykaa.com/nykdesignstudio-images/pub/media/catalog/product/3/8/3884c_1.jpg?rnd=20200526195200",
                "isOutOfStock": 0,
                "subTitle": "Black Embellished Sandals",
                "title": "Catwalk",
                "price": 1995,
                "tag": {},
                "offerCount": 0,
                "categoryId": [
                    "102",
                    "3528",
                    "3522",
                    "2",
                    "6151",
                    "6557"
                ],
                "discount": 55,
                "offers": null,
                "discountedPrice": 899,
                "actionUrl": "/catwalk-black-embellished-sandals-3/p/537684",
                "aspectRatio": 0.75,
                "sizeVariation": [
                    {
                        "id": "537678",
                        "title": "4"
                    },
                    {
                        "id": "537679",
                        "title": "5"
                    },
                    {
                        "id": "537680",
                        "title": "6"
                    },
                    {
                        "id": "537681",
                        "title": "7"
                    }
                ],
                "type": "configurable",
                "id": "537684"
            },

此网站不需要Splash

【讨论】:

  • 感谢您提供其余 API,但我想列出品牌以及链接(在“品牌”下拉菜单中)。这只是一个例子。我正在寻找如何抓取 React 网站的方法,因为现在许多初创公司和公司已经转向 React 框架。我也可以知道获取此类 api 端点的方法,即如果无法抓取,如何找到它们。感谢您抽出宝贵时间。
  • 在 chrome 中打开网站 > ctrl + shift + i 导航到 Network 选项卡 > 查找所需的 API 调用。在我的回答中,我只提供了一个 API 调用。对于品牌,它会有所不同,或者可能会改变一些参数
  • 不同的页面会有不同的API调用。但是对于这个网站,如果您需要 brands,它们位于 JS window.__PRELOADED_STATE__ = JSON.parse 内。所以你可以收集这个 JSON,它将包含所有品牌的名称、链接等。如果你需要产品/类别信息 - 我猜这将是一个 API 调用
  • 好的,我知道了。谢谢
猜你喜欢
  • 1970-01-01
  • 2014-11-23
  • 2013-05-09
  • 2020-10-12
  • 2018-03-10
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多