Вы код - он не работает, потому что вы создаете GameItem () вне вашего цикла списка. Должно быть, я пропустил открытку об этих методах .get () и .getall (). Может быть, кто-то может прокомментировать, чем он отличается от экстракта?
Ваш код ошибки
def parse(self, response):
item = GameItem() # this line right here only creates 1 game item per page
saved_name = ""
for game in response.css("div.row.mt-1.list-view"): # this line fails since it gets all the items on the page. This is a wrapper wrapping all the items inside of it. See below code for corrected selector.
saved_name = game.css("a.card-text::text").get() or saved_name
item["Card_Name"] = saved_name.strip()
if item["Card_Name"] != None:
saved_name = item["Card_Name"].strip()
else:
item["Card_Name"] = saved_name
yield item
Исправлен код для решения вашей проблемы:
def parse(self, response):
for game in response.css("div.product-col"):
item = GameItem()
item["Card_Name"] = game.css("a.card-text::text").get()
if not item["Card_Name"]:
continue # this will skip to the next item if there is no card name, if there is a card name it will continue to yield the item. Another way of doing this would be to return nothing. Just "return". You only do this if you DO NOT want code after executed. If you want the code after to execute then use yeid.
yield item