Comment accéder aux paramètres de scrapy du Pipeline d'articles

Comment puis-je accéder aux paramètres de scrapy dans settings.py de la filière des articles. La documentation mentionne qu'on peut y accéder par le crawler dans les extensions, mais je ne vois pas comment accéder au crawler dans les pipelines.

22
demandé sur Kevin Workman 2012-12-29 01:19:39

4 réponses

Ok, donc la documentation à http://doc.scrapy.org/en/latest/topics/extensions.html dit que

le principal point d'entrée pour une extension Scrapy (ceci inclut également middlewares et pipelines) est la méthode de classe de_crawler qui reçoit une instance Crawler qui est l'objet principal contrôlant le Scrapy crawler. Grâce à cet objet, vous pouvez accéder aux paramètres des signaux, stats, et aussi contrôler le comportement de crawler, si votre extension a besoin pour une telle chose.

oui, alors vous pouvez avoir une fonction pour obtenir les paramètres.

@classmethod
def from_crawler(cls, crawler):
    settings = crawler.settings
    my_setting = settings.get("MY_SETTING")
    return cls(my_setting)

le moteur à chenilles appelle alors la fonction init du pipeline avec my_setting, comme ceci:

def __init__(self, my_setting):
    self.my_setting = my_setting

Et d'autres fonctions peuvent y accéder avec l' self.my_setting, comme prévu.

alternativement, dans le from_crawler() fonction, vous pouvez passer à la crawler.settings objet __init__(), et ensuite accéder aux paramètres du pipeline au besoin au lieu de les tirer dans le constructeur.

24
répondu avaleske 2012-12-28 21:33:13

la façon d'accéder à vos paramètres Scrapy (tels que définis dans settings.py) à partir de your_spider.py c'est simple. Toutes les autres réponses sont trop compliqués. La raison en est la très mauvaise maintenance de la documentation Scrapy, combinée avec de nombreuses mises à jour et changements récents. Ni dans la documentation" paramètres""Comment accéder aux paramètres", ni dans le "Paramètres de l'API" ont-ils pris la peine de donner n'importe quel exemple réalisable. Voici un exemple, comment obtenir votre courant USER_AGENT chaîne de caractères.

il suffit d'ajouter les lignes suivantes your_spider.py:

# To get your settings from (settings.py):
from scrapy.utils.project import get_project_settings
...
class YourSpider(BaseSpider):
    ...
    def parse(self, response):
        ...
        settings = get_project_settings()
        print "Your USER_AGENT is:\n%s" % (settings.get('USER_AGENT'))
        ...

Comme vous pouvez le voir, il n'y a pas besoin d'utiliser @classmethod ou redéfinir le from_crawler() ou __init__() fonctions. Espérons que cette aide.

PS. Je ne sais toujours pas pourquoi utiliser from scrapy.settings import Settings ne fonctionne pas de la même façon, puisque ce serait le choix le plus évident de l'importation?

22
répondu not2qubit 2014-01-06 19:28:21

La bonne réponse est: ça dépend où dans le pipeline vous souhaitez accéder aux paramètres.

avaleske a répondu comme si vous vouliez accéder aux paramètres en dehors de vos pipelines process_item méthode mais il est très probable que c'est là que vous voulez le paramètre et donc il y a une façon beaucoup plus facile que L'instance araignée elle-même se passe en argument.

class PipelineX(object):

    def process_item(self, item, spider):
         wanted_setting = spider.settings.get('WANTED_SETTING')
15
répondu Darian Moody 2014-02-12 17:35:52

la structure du projet est assez plat, pourquoi pas:

# pipeline.py
from myproject import settings
2
répondu timfeirg 2014-11-28 07:38:44