提取与产品ID相匹配的产品类别

时间:2019-08-18 09:12:50

标签: scrapy

我已经在资源文件夹中创建了一个keyword.csv文件,以便自动从其中列出的所有产品中获取数据。这很完美。 .csv文件的第一列称为“关键字”。关键字基于代表产品类别的唯一编号(例如,高压清洗机,地板清洁剂等)。我正在使用此数字来调整从中获取所有数据的API URL。

我想打印出产品类别。因为在我要从中获取数据的API中没有定义产品类别,所以我想打印出我的.csv文件的第二列,即“关键字类型”。应将“关键字类型”打印到具有相同“关键字”的产品上。

第二,我一直在搜索,但是找不到用于替换一个字符串中多个字符的解决方案。有没有一种做某种字典的方法,以便将“ \ u00e9”替换为“é”,将“ \ u00b2”替换为“²”,等等。我尝试使用.replace('text','')和.split (),但对于多个字符来说,这还不够。

我尝试过的事情

我尝试在def parse(自身,响应)中调用“关键字类型”:,但我不知道如何检查正在使用的关键字。因此,它会不断重复打印相同的“关键字类型”。

...
    def parse(self, response):
    #Calling the "category" from the keywords.csv file -- THIS IS NOT WORKING
        with open(os.path.join(os.path.dirname(__file__), "../resources/keywords.csv")) as search_keywords:
            for keyword in csv.DictReader(search_keywords):
                category=keyword["keywordtype"]

...

完整代码#1

Spider.py

# -*- coding: utf-8 -*-
"""
Created on Mon Aug 12 22:44:35 2019

@author: bergs
"""

# -*- coding: utf-8 -*-
import scrapy
from krc.items import KrcItem
import json
import os
import csv
import time
import datetime

class KRCSpider(scrapy.Spider):
    name = "krc_spider"
    allowed_domains = ["kaercher.com"]
    start_urls = ['https://www.kaercher.com/api/v1/products/search/shoppableproducts/partial/20035386?page=1&size=8&isocode=nl-NL']

    def start_requests(self):
        """Read keywords from keywords file amd construct the search URL"""

        with open(os.path.join(os.path.dirname(__file__), "../resources/keywords.csv")) as search_keywords:
            for keyword in csv.DictReader(search_keywords):
                search_text=keyword["keyword"]
                category = keyword["keywordtype"]
                url="https://www.kaercher.com/api/v1/products/search/shoppableproducts/partial/{0}?page=1&size=8&isocode=nl-NL".format(
                    search_text)
                # The meta is used to send our search text into the parser as metadata
                yield scrapy.Request(url, callback = self.parse, meta = {"search_text": search_text, "category": category}) 

    def parse(self, response):
        category = response.meta["category"]

        current_page = response.meta.get("page", 1)
        next_page = current_page + 1

        #Printing the timestamp when fetching the data, using default timezone from the requesting machine
        ts = time.time()
        timestamp = datetime.datetime.fromtimestamp(ts).strftime('%d-%m-%Y %H:%M:%S')

        #Defining the items
        item = KrcItem()
        data = json.loads(response.text)
        for company in data.get('products', []):
            item["productid"] = company["id"]
            item["category"] = category
            item["name"] = company["name"]
            item["description"] = company["description"]
            item["price"] = company["priceFormatted"].replace("\u20ac","").strip()
            item["timestamp"] = timestamp
            yield item

        #Checking whether "isTruncated" is true (boolean), if so, next page will be triggered
        if data["isTruncated"]:
            yield scrapy.Request(
                url="https://www.kaercher.com/api/v1/products/search/shoppableproducts/partial/20035386?page={page}&size=8&isocode=nl-NL".format(page=next_page),
                callback=self.parse,
                meta={'page': next_page},
            )

完整代码#2

# -*- coding: utf-8 -*-
"""
Created on Mon Aug 12 22:44:35 2019

@author: bergs
"""

# -*- coding: utf-8 -*-
import scrapy
from krc.items import KrcItem
import json
import os
import csv
import time
import datetime

class KRCSpider(scrapy.Spider):
    name = "krc_spider"
    allowed_domains = ["kaercher.com"]
    start_urls = ['https://www.kaercher.com/api/v1/products/search/shoppableproducts/partial/20035386?page=1&size=8&isocode=nl-NL']

    def start_requests(self):
        """Read keywords from keywords file amd construct the search URL"""

        with open(os.path.join(os.path.dirname(__file__), "../resources/keywords.csv")) as search_keywords:
            for keyword in csv.DictReader(search_keywords):
                search_text = keyword["keyword"]
                url="https://www.kaercher.com/api/v1/products/search/shoppableproducts/partial/{0}?page=1&size=8&isocode=nl-NL".format(
                    search_text)
                # The meta is used to send our search text into the parser as metadata
                yield scrapy.Request(url, callback = self.parse, meta = {"search_text": search_text}) 

    def parse(self, response):
        current_page = response.meta.get("page", 1)
        next_page = current_page + 1

        #Printing the timestamp when fetching the data, using default timezone from the requesting machine
        ts = time.time()
        timestamp = datetime.datetime.fromtimestamp(ts).strftime('%d-%m-%Y %H:%M:%S')

        #Defining the items
        item = KrcItem()
        data = json.loads(response.text)
        for company in data.get('products', []):
            item["productid"] = company["id"]
            item["category"] = company["url"].split('/')[-2].replace('-',' ')
            item["name"] = company["name"]
            item["description"] = company["description"]
            item["price"] = company["priceFormatted"].replace("\u20ac","").strip()
            item["timestamp"] = timestamp
            yield item

        #Checking whether "isTruncated" is true (boolean), if so, next page will be triggered
        if data["isTruncated"]:
            yield scrapy.Request(
                url="https://www.kaercher.com/api/v1/products/search/shoppableproducts/partial/20035386?page={page}&size=8&isocode=nl-NL".format(page=next_page),
                callback=self.parse,
                meta={'page': next_page},
            )

Keywords.csv

keyword,keywordtype
20035386,Hogedrukreiniger
20035424,Window Vacs

items.py

import scrapy


class KrcItem(scrapy.Item):
    productid=scrapy.Field()
    name=scrapy.Field()
    description=scrapy.Field()
    price=scrapy.Field()
    producttype=scrapy.Field()
    timestamp=scrapy.Field()
    category=scrapy.Field()
    pass

Results.json#1

[
{"productid": 10491477, "category": "Window Vacs", "name": "WV 6 + KV 4(wit)", "description": "De vibrerende accu-wisser KV 4 inclusief elektrische bevochtiging, vibratie, tweede wisdoek en meer accessoires maakt het vuil los - en de Window Vac WV 6 zuigt het achterblijvende water af.", "price": "169,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10491478, "category": "Window Vacs", "name": "WV 6 + KV 4", "description": "Schone vensters in een handomdraai: met de vibrerende Window Vac KV 4 inclusief elektrische watervoorziening en vibratie maakt u het vuil eerst los en daarna zuigt u met de Window Vac WV 6 het vuile water af.", "price": "159,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10491479, "category": "Window Vacs", "name": "WV 6 Plus (wit)", "description": "In een set met 2 wisdoeken voor binnen en buiten, sproeiflacon, reinigingsmiddel en vuilkrabber: de Window Vac WV 6 Premium met innovatieve zuigstrip is nog flexibeler in gebruik.", "price": "109,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10491480, "category": "Window Vacs", "name": "WV 6 Plus", "description": "Met innovatieve striptechnologie en nog flexibeler in gebruik: de Window Vac WV 6 Plus voor streepvrij schone vensters in een mum van tijd.", "price": "99,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10491481, "category": "Window Vacs", "name": "WV 2 + KV4 (wit)", "description": "Sterk duo voor streepvrij schone vensters: de vibrerende accu-wisser KV 4 inclusief elektrische bevochtiging, vibratie, tweede wisdoek en meer extra's, en de Window Vac WV 2.", "price": "139,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10491482, "category": "Window Vacs", "name": "WV 2 + KV 4", "description": "Voor moeiteloos ramen lappen: de vibrerende accu-wisser KV 4 inclusief elektrische watervoorziening en trilfunctie maakt het vuil los - en de Window Vac WV 2 zuigt het vuile water af.", "price": "129,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10475755, "category": "Window Vacs", "name": "KV 4 Premium", "description": "Inclusief tweede wisdoek: de Window Vac KV 4 met elektrische watervoorziening en ondersteunende trilfunctie maakt het vuil moeiteloos los van alle gladde oppervlakken.", "price": "89,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10475756, "category": "Window Vacs", "name": "KV 4", "description": "De vibrerende accu-wisser KV 4 maakt vuil moeiteloos los van gladde oppervlakken. Door het elektrisch aangebrachte water en de trillingen wordt handmatig schrobben overbodig.", "price": "79,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10461927, "category": "Hogedrukreiniger", "name": "K 7 Premium Full Control Plus Home", "description": "Inclusief slanghaspel en Home Kit: de K 7 Premium Full Control Plus Home. U kunt de juiste druk instellen met de +/- knoppen en de LCD-scherm op het hogedrukpistool van de hogedrukreiniger.", "price": "699,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10453128, "category": "Hogedrukreiniger", "name": "K 7 Premium Full Control Plus", "description": "Inclusief slanghaspel: de K 7 Premium Full Control Plus. U kunt de juiste druk instellen met de +/- knoppen en het LCD-scherm op het hogedrukpistool van de hogedrukreiniger.", "price": "639,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10461929, "category": "Hogedrukreiniger", "name": "K 7 Full Control Plus Home", "description": "De ideale hogedrukreiniger voor regelmatig gebruik op hardnekkig vuil. K 7 Full Control Plus Home met Home Kit en hogedrukpistool inclusief +/- knoppen voor drukregeling en LCD-scherm.", "price": "639,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10442692, "category": "Hogedrukreiniger", "name": "K 7 Full Control Plus", "description": "De K 7 Full Control Plus hogedrukreiniger van K\u00e4rcher inclusief hogedrukpistool met drukregeling en dosering van reinigingsmiddel met een druk op de knop, en een LCD-scherm waarop de druk wordt weergegeven.", "price": "579,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10462452, "category": "Hogedrukreiniger", "name": "K 5 Premium Full Control Plus Home", "description": "K 5 Premium Full Control Plus Home hogedrukreiniger met +/- knoppen voor drukregeling en LCD-scherm op het hogedrukpistool. Inclusief Home Kit, 3-in-1 Multi Jet spuitlans en slanghaspel.", "price": "499,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10442700, "category": "Hogedrukreiniger", "name": "K 5 Premium Full Control Plus", "description": "Voor regelmatig verwijderen van matige verontreiniging op auto's, stenen muren en fietsen. K 5 Premium Full Control Plus hogedrukreiniger inclusief hogedrukpistool met +/- knoppen voor drukregeling en LCD-scherm.", "price": "449,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10430946, "category": "Hogedrukreiniger", "name": "K 5 Full Control", "description": "Hogedrukreiniger met drukindicator op het hogedrukpistool - voor de juiste druk op elk oppervlak. Ideaal voor regelmatig gebruik op matige verontreiniging. Oppervlakteprestatie van 40 m\u00b2/u.", "price": "379,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10441978, "category": "Hogedrukreiniger", "name": "K 4 Premium Full Control Home", "description": "Hogedrukreiniger met drukindicator op het hogedrukpistool \u2013 voor de juiste druk op elk oppervlak. Inclusief slanghaspel en Home Kit. Ideaal voor een gemiddelde vervuilingsgraad. Oppervlakteprestatie van 30 m\u00b2/u.", "price": "369,95", "timestamp": "18-08-2019 15:53:30"}
]

Results.json#2

[
{"productid": 10461927, "category": "hogedrukreinigers", "name": "K 7 Premium Full Control Plus Home", "description": "Inclusief slanghaspel en Home Kit: de K 7 Premium Full Control Plus Home. U kunt de juiste druk instellen met de +/- knoppen en de LCD-scherm op het hogedrukpistool van de hogedrukreiniger.", "price": "699,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10453128, "category": "hogedrukreinigers", "name": "K 7 Premium Full Control Plus", "description": "Inclusief slanghaspel: de K 7 Premium Full Control Plus. U kunt de juiste druk instellen met de +/- knoppen en het LCD-scherm op het hogedrukpistool van de hogedrukreiniger.", "price": "639,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10461929, "category": "hogedrukreinigers", "name": "K 7 Full Control Plus Home", "description": "De ideale hogedrukreiniger voor regelmatig gebruik op hardnekkig vuil. K 7 Full Control Plus Home met Home Kit en hogedrukpistool inclusief +/- knoppen voor drukregeling en LCD-scherm.", "price": "639,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10442692, "category": "hogedrukreinigers", "name": "K 7 Full Control Plus", "description": "De K 7 Full Control Plus hogedrukreiniger van K\u00e4rcher inclusief hogedrukpistool met drukregeling en dosering van reinigingsmiddel met een druk op de knop, en een LCD-scherm waarop de druk wordt weergegeven.", "price": "579,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10462452, "category": "hogedrukreinigers", "name": "K 5 Premium Full Control Plus Home", "description": "K 5 Premium Full Control Plus Home hogedrukreiniger met +/- knoppen voor drukregeling en LCD-scherm op het hogedrukpistool. Inclusief Home Kit, 3-in-1 Multi Jet spuitlans en slanghaspel.", "price": "499,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10442700, "category": "hogedrukreinigers", "name": "K 5 Premium Full Control Plus", "description": "Voor regelmatig verwijderen van matige verontreiniging op auto's, stenen muren en fietsen. K 5 Premium Full Control Plus hogedrukreiniger inclusief hogedrukpistool met +/- knoppen voor drukregeling en LCD-scherm.", "price": "449,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10430946, "category": "hogedrukreinigers", "name": "K 5 Full Control", "description": "Hogedrukreiniger met drukindicator op het hogedrukpistool - voor de juiste druk op elk oppervlak. Ideaal voor regelmatig gebruik op matige verontreiniging. Oppervlakteprestatie van 40 m\u00b2/u.", "price": "379,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10441978, "category": "hogedrukreinigers", "name": "K 4 Premium Full Control Home", "description": "Hogedrukreiniger met drukindicator op het hogedrukpistool \u2013 voor de juiste druk op elk oppervlak. Inclusief slanghaspel en Home Kit. Ideaal voor een gemiddelde vervuilingsgraad. Oppervlakteprestatie van 30 m\u00b2/u.", "price": "369,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10491477, "category": "window vacs", "name": "WV 6 + KV 4(wit)", "description": "De vibrerende accu-wisser KV 4 inclusief elektrische bevochtiging, vibratie, tweede wisdoek en meer accessoires maakt het vuil los - en de Window Vac WV 6 zuigt het achterblijvende water af.", "price": "169,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10491478, "category": "window vacs", "name": "WV 6 + KV 4", "description": "Schone vensters in een handomdraai: met de vibrerende Window Vac KV 4 inclusief elektrische watervoorziening en vibratie maakt u het vuil eerst los en daarna zuigt u met de Window Vac WV 6 het vuile water af.", "price": "159,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10491479, "category": "window vacs", "name": "WV 6 Plus (wit)", "description": "In een set met 2 wisdoeken voor binnen en buiten, sproeiflacon, reinigingsmiddel en vuilkrabber: de Window Vac WV 6 Premium met innovatieve zuigstrip is nog flexibeler in gebruik.", "price": "109,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10491480, "category": "window vacs", "name": "WV 6 Plus", "description": "Met innovatieve striptechnologie en nog flexibeler in gebruik: de Window Vac WV 6 Plus voor streepvrij schone vensters in een mum van tijd.", "price": "99,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10491481, "category": "window vacs", "name": "WV 2 + KV4 (wit)", "description": "Sterk duo voor streepvrij schone vensters: de vibrerende accu-wisser KV 4 inclusief elektrische bevochtiging, vibratie, tweede wisdoek en meer extra's, en de Window Vac WV 2.", "price": "139,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10491482, "category": "window vacs", "name": "WV 2 + KV 4", "description": "Voor moeiteloos ramen lappen: de vibrerende accu-wisser KV 4 inclusief elektrische watervoorziening en trilfunctie maakt het vuil los - en de Window Vac WV 2 zuigt het vuile water af.", "price": "129,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10475755, "category": "window vacs", "name": "KV 4 Premium", "description": "Inclusief tweede wisdoek: de Window Vac KV 4 met elektrische watervoorziening en ondersteunende trilfunctie maakt het vuil moeiteloos los van alle gladde oppervlakken.", "price": "89,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10475756, "category": "window vacs", "name": "KV 4", "description": "De vibrerende accu-wisser KV 4 maakt vuil moeiteloos los van gladde oppervlakken. Door het elektrisch aangebrachte water en de trillingen wordt handmatig schrobben overbodig.", "price": "79,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10430942, "category": "hogedrukreinigers", "name": "K 4 Premium Full Control", "description": "Hogedrukreiniger met drukindicator op het hogedrukpistool - voor de juiste druk op elk oppervlak. Inclusief slanghaspel. Ideaal voor matige verontreiniging. Oppervlakteprestatie van 30 m\u00b2/u.", "price": "319,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10441943, "category": "hogedrukreinigers", "name": "K 4 Full Control Home", "description": "Hogedrukreiniger met drukindicator op het hogedrukpistool \u2013 voor de juiste druk op elk oppervlak. Ideaal voor de incidentele reiniging van een gemiddelde vervuiling. Inclusief Home Kit. Oppervlakteprestatie van 30 m\u00b2/u.", "price": "339,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10430938, "category": "hogedrukreinigers", "name": "K 4 Full Control", "description": "Hogedrukreiniger met drukindicator op het hogedrukpistool \u2013 voor de juiste druk op elk oppervlak. Ideaal voor de incidentele reiniging van een gemiddelde vervuiling. Oppervlakteprestatie van 30 m\u00b2/u.", "price": "289,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10501457, "category": "hogedrukreinigers", "name": "K 3 Full Control Home T150", "description": "Perfect schoon rondom huis dankzij de Home Kit inclusief oppervlaktereiniger en reinigingsmiddelen. Het pistool van de K 3 Full Control Home hogedrukreiniger geeft het drukniveau aan.", "price": "209,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10501459, "category": "hogedrukreinigers", "name": "K 3 Full Control", "description": "Ideale hogedrukreiniger voor incidenteel gebruik bij lichte vervuiling. De K 3 Full Control geeft de druk aan op het pistool. Zo kunt u voor elk oppervlak de juiste druk instellen.", "price": "179,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10406424, "category": "hogedrukreinigers", "name": "K 3 Home", "description": "De K 3 Home hogedrukreiniger met Home Kit is ideaal voor incidenteel gebruik en voor de verwijdering van lichte vervuiling op bijvoorbeeld fietsen, tuinhekken en motorfietsen.", "price": "219,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10461899, "category": "hogedrukreinigers", "name": "K 2 Premium Full Control Home", "description": "De K 2 Premium Full Control Home hogedrukreiniger van K\u00e4rcher inclusief Home Kit en met gerichte drukregeling. Ideaal voor oppervlakken rondom het huis en op lichtere vervuiling.", "price": "179,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10464555, "category": "hogedrukreinigers", "name": "K 2 HOME T150", "description": "De K 2 Home op wieltjes is speciaal ontworpen voor incidenteel gebruik en lichte vervuiling. Dankzij de Home Kit houdt u met de hogedrukreiniger ook grotere oppervlakken rondom het huis eenvoudig schoon.", "price": "129,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10479573, "category": "hogedrukreinigers", "name": "K 2 Basic", "description": "De 'K2 Basic' hogedrukreiniger is ideaal voor incidenteel gebruik en verwijdering van normale vervuiling rondom de woning (bijv. fietsen, tuingereedschap, tuinmeubilair).", "price": "79,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10497774, "category": "hogedrukreinigers", "name": "K 7 Compact Home", "description": "Compact en handzaam: de hogedrukreiniger K 7 Compact met watergekoelde motor. Voor frequent gebruik en sterke vervuiling, bijvoorbeeld op straten, in zwembaden, op fietsen of grote auto's.", "price": "589,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10497770, "category": "hogedrukreinigers", "name": "K 5 Compact Home", "description": "De K5 Compact Home met watergekoelde motor neemt weinig ruimte in en kan comfortabel worden vervoerd. Hogedrukreiniger inclusief Home Kit met oppervlaktereiniger T 350 en steen- en gevelreiniger.", "price": "379,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10497773, "category": "hogedrukreinigers", "name": "K 5 Compact", "description": "Inclusief innovatieve slangopberging: de eenvoudig te vervoeren en op te bergen hogedrukreiniger K 5 Compact voor regelmatig gebruik bij middelzware vervuiling. Oppervlakteprestatie 40 m\u00b2/u.", "price": "329,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10497765, "category": "hogedrukreinigers", "name": "K 4 Compact Home", "description": "Eenvoudig te vervoeren en snel op te bergen: de K 4 Compact voor incidenteel gebruik bij middelzware vervuiling. Inclusief telescoopgreep en watergekoelde motor. Oppervlakteprestatie 30 m\u00b2/u.", "price": "289,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10497768, "category": "hogedrukreinigers", "name": "K 4 Compact", "description": "Eenvoudig te vervoeren en snel op te bergen: de K 4 Compact voor incidenteel gebruik bij middelzware vervuiling. Inclusief telescoopgreep en watergekoelde motor. Oppervlakteprestatie 30 m\u00b2/u.", "price": "249,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10472949, "category": "hogedrukreinigers", "name": "K 2 Battery Set", "description": "Kan overal worden ingezet waar er geen stopcontact beschikbaar is: De K2 hogedrukreiniger met accuaandrijving, inclusief 36 V li-ionaccu en oplader. Ideaal voor uiteenlopende toepassingen.", "price": "399,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10472950, "category": "hogedrukreinigers", "name": "K 2 Battery", "description": "De hogedrukreiniger met accuaandrijving voor flexibel schoonmaken zonder stopcontact. Ideaal voor uiteenlopende toepassingen rondom het huis. Accu en oplader worden niet meegeleverd.", "price": "199,95", "timestamp": "18-08-2019 16:43:58"}
]

1 个答案:

答案 0 :(得分:0)

您需要使用yield将CSV文件中的parse类别更改为request.meta

def start_requests(self):
    """Read keywords from keywords file amd construct the search URL"""

    with open(os.path.join(os.path.dirname(__file__), "../resources/keywords.csv")) as search_keywords:
        for keyword in csv.DictReader(search_keywords):
            search_text=keyword["keyword"]
            category = keyword["keywordtype"]
            url="https://www.kaercher.com/api/v1/products/search/shoppableproducts/partial/{0}?page=1&size=8&isocode=nl-NL".format(
                search_text)
            # The meta is used to send our search text into the parser as metadata
            yield scrapy.Request(url, callback = self.parse, meta = {"search_text": search_text, "category": category}) 

def parse(self, response):
    category = response.meta["category"]
    ...

更新 如果要在下一页显示category,则需要再次使用.meta

    #Checking whether "isTruncated" is true (boolean), if so, next page will be triggered
if data["isTruncated"]:
    yield scrapy.Request(
        url="https://www.kaercher.com/api/v1/products/search/shoppableproducts/partial/20035386?page={page}&size=8&isocode=nl-NL".format(page=next_page),
        callback=self.parse,
        meta={'page': next_page, "category": category},
    )