J'essaie d'utiliser Scrapy pour explorer une série de magasins de jeux et j'ai rencontré le même problème avec chacun d'eux. J'utilise XPath, et le code HTML pour les prix des jeux change selon que le prix est simplement indiqué comme suit £ 20.09
ou £ 20.09
avec une ligne qui le traverse et ensuite £ 14.49
pour montrer la réduction. Je suis heureux d'avoir deux colonnes, was 20.09
(qui contiendrait des valeurs nulles) et une après now 14.49
mais je n'arrive pas à trouver comment avoir une valeur nulle au lieu qu'elle remplace toutes les valeurs suivantes.
C'est mon code pour le site web cdkeys - https://www.cdkeys.com/pc/games?limit=50 qui propose des jeux avec et sans remises.
allowed_urls = ['https://www.cdkeys.com/pc/games?limit=50?']
start_urls = ['https://www.cdkeys.com/pc/games/{pageno}?limit=50'.format(pageno=pageno)
for pageno in range(1, 10)]
def parse(self, response):
Games = response.xpath('//*[@id="root-wrapper"]/div/div[1]/div[2]/div[3]/div[2]/div[2]/ul/li/h2/a/text()').extract()
Prices = response.xpath('//span[starts-with(@id, "product-price-")]/span[1]/span/text()').extract()
for i, (Game, Price) in enumerate(zip(Games, Prices)):
yield {'index': i, 'Game': Game, 'Price':Price}
Le problème réside dans le XPath pour les prix, je peux soit obtenir la liste des seuls prix réduits, soit une liste des prix uniquement pour les jeux sans réduction puisque le HTML est très différent pour ces catégories.
Ce qui m'empêche de créer simplement deux listes est que, puisque j'utilise zip
y enumerate
il itère simplement à travers le premier x
de jeux jusqu'à ce qu'il n'y ait plus de prix, au lieu de lier chaque jeu au prix correspondant.
Vous pouvez m'aider à afficher uniquement le prix correct dans la fenêtre de l'application. Prices
ou trouver un moyen d'avoir des valeurs vides au lieu de remplacer les valeurs suivantes serait très apprécié. Je suis nouveau dans le monde de Python et de l'exploration du Web et j'essaie juste de me faire une idée de tout cela.