2017-09-28 1 views
0

Je veux implémenter des arguments dans l'araignée pour l'url. Par exemple:scrapy python prendre args

scrapy crawl test -a url="https://example.com" 

Et après que je veux prendre automatiquement les start_urls et le convertir automatiquement en domain_allowed. Ex:

domain_allowed = ['example.com'] 

Et après que je veux juste passer le mot Exemple au pipeline mysql où il crée la table en utilisant simplement le mot Exemple du domain_allowed

C'est ce que J'ai pour l'instant:

class Spider(BaseSpider): 
    name = 'seeker' 

    def __init__(self, *args, **kwargs): 
     urls = kwargs.pop('urls', []) 
     if urls: 
      self.start_urls = urls.split(',') 
     self.logger.info(self.start_urls) 

     # take the arg "urls" and convert it to allowed_domains 
     url = "".join(urls) 
     self.allowed_domains = [url.split('/')[-1]] 

     super(SeekerSpider, self).__init__(*args, **kwargs) 


    # i have to use "domain" here and not inside the function parge_page or __init__ 
    domain = domain_allowed.replace(".", "_") 
    # create folder with the domain name 

    def parse_page(self, response): 
     ... 

Fondamentalement, je besoin d'utiliser le self.allowed_dom Ains en dehors de la fonction ... C'est mon problème ... la variable domaine ne le prend pas.

Et cela fait partie de mon pipelines.py

class MySQLPipeline(object): 
    def __init__(self, *args, **kwargs): 
     self.connect = pymysql.connect(...) 
     self.cursor = self.connect.cursor() 
     # print "Input the name of the table: " <-- its commented 
     # tablename = raw_input(" ") <-- its commented 
     date = datetime.datetime.now().strftime("%y_%m_%d_%H_%M") 
     self.tablename = kwargs.pop('tbl', '') 
     self.newname = self.tablename + "_" + date 
     print self.newname 
     # create a different way to create a tablename 
     # importing the "allowed_domain" and strip it 
     # and give tablename 

Les pipelines i ai fait de cette way..but ne est pas bon ... je veux prendre le allowed_domain de l'araignée et passe ici et le diviser pour ne prendre que le nom du domaine sans .com ou .Whatever

Nous vous remercions à l'avance

Répondre

0

Sur mon téléphone désolé sur le formatage ...

J'utiliser l'objet d'araignée dans la fonction de l'élément de processus: def process_item (auto, article, araignée): « . « spider.allowed_domains.replace (» _ ")

+0

oui mais il passera à travers chaque demande ... donc fondamentalement il va le créer 100 fois .... je dois le faire dehors ... et si je le fais ** def __init__ (self, spider) ** à la place ... en fait j'ai déjà essayé et ça ne marche pas ... je ne peux pas faire spider.allowed_domain ... ça n'existe pas – Omega