Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Scrapy : ajouter un export CSV personalisé

+2 votes

Merci à Sam et Max de m'avoir aiguillé vers ce site.

Je me débrouille avec Python mais je ne suis pas un expert non plus.
Je débute également avec Scrapy (un framework pour créer des robots qui parcours un site et en extraire des informations).
J'ai créer un script tout intégré je n'utilises pas les projets façon Scrapy.

L'export CSV par défaut me pose problème, il utilises les virgules en tant que séparateur or les virgules contenue dans les infos que je récupère interfèrent avec celles qui délimitent les cellules, j'aurais voulu pouvoir choisir moi même le séparateur, par exemple un point-virgule.

J'ai trouvé le code suivant pour ce faire :

class CsvOptionRespectingItemExporter(CsvItemExporter):
    def __init__(self, *args, **kwargs):
        delimiter = settings.get('CSV_DELIMITER', ';')
        kwargs['delimiter'] = delimiter
        super(CsvOptionRespectingItemExporter, self).__init__(*args, **kwargs)

J'ai ajouté ceci dans mon gros fichier .py qui contient toute la mécanique de mon robot.

L'étape suivante est de déclarer ce nouveau module d'export dans Scrapy, pour ce faire, j'ai trouvé le code suivant :

crawler = CrawlerProcess({
    ...                                                                                                                                                                    
    'FEED_EXPORTERS' : {'csv' : '.CsvOptionRespectingItemExporter'},
    ...                                       

Hélas, mon .CsvOptionRespectingItemExporter ne fonctionne pas. En gros, il attend un chemin absolu pour importer le module, hélas, je ne sais pas comment construire ça, j'ai essayé de mettre le chemin de mon fichier mais ça n'a pas fonctionné non plus, j'ai essayé tout un tas de choses au hasard, et vous devez vous en douter, ça n'a pas fonctionné.

Lorsque je mets le chemin du fichier, j'ai une erreur : "Import by filename is not supported."
Lorsque je mets le nom de la classe en plus, j'ai : "not a full path"
Etc.

Voila, si quelqu'un a une idée.

demandé 8-Oct-2015 par Nickko (140 points)
edité 8-Oct-2015 par max

on peut avoir tes imports/erreur en détail? genre un fichier où t'importe et ça mer..e, ainsi que les erreurs générées,
je suppose que t'es déjà passé par ?

Est-il nécessaire d'utiliser scrapy pour le csv ? Le module csv propose une bonne API permettant de spécifier les séparateurs.

@Lucas Scrapy récupère les données et on a le choix entre plusieurs module de sortie utiliser un autre module à la place serait très compliqué (enfin pour moi).

@Boblinux,
L'import qui ne fonctionne pas est dans mon deuxième bloc de code mais j'ai pu avancer sur ce problème. J'arrive maintenant à faire l'import toutefois, comme le module est dans le même fichier que l'import, mon script se lance deux fois.

Est-ce que ce genre de problème vous parle ?
Pensez-vous que je doive ouvrir un sujet spécifique puisque finalement ce n'est plus tout à fait le même problème ?

@Nickko

Tu peux ouvrir un autre post vu que la question n'est plus la même mais il serait cool si tu postais ta solution à ton problème initial ici, la selectionner ensuite ouvrir un autre post.

Peut-être que ça pourrait être utile à d'autres si jamais quelqu'un a le même problème que toi

il faut mettre le module que tu veux importer dans un fichier, et faire l'import a partir d'un autre fichier.

Merci pour vos réponses, j'ai du laisser ce projet de côté (temporairement je l'espère).

Votre réponse

Preview

Votre nom à afficher ( en option ):
Vie privée: . Votre adresse de messagerie ne sera utilisée que pour l'envoi de ces notifications .
Vérification anti -spam:
Pour éviter cette vérification à l'avenir, Connectez vous ou inscrivez vous.
...