2017-10-02 1 views
0

J'utilise scrapy avec le fichier csv en entrée, mais je veux utiliser un dossier avec à l'intérieur du fichier csv à utiliser en entrée parce que mon csv est trop grand pour utiliser directement je le diviser en plusieurs fichiers .scrapy avec le dossier comme une entrée

Le début de mon script de travail est ici:

class mySuper(CrawlSpider): 
    name="super" 
    f = open("/root/super/super/urls.csv") 
    allowed_domains = [url.strip() for url in f.readlines()] 
    f = open("/root/super/super/urls.csv") 
    start_urls = ['http://www.'+url.strip() for url in f.readlines()] 
    f.close() 

    rules = (Rule (LinkExtractor(allow=('(.*)[C-c]ontact','(.*)legal','(.*)mention','(.*)information'),deny=('(.*)='),restrict_xpaths=()), callback="parse_start_url", follow=False),) 

    def parse_start_url(self,response): 

J'essaie cela, mais faut-il que le dernier fichier dans le répertoire:

import os 
class mySuper(CrawlSpider): 
    name="super" 
    directory = os.path.join("c:\\","/root/super/super/csv") 
    for root,dirs,files in os.walk(directory): 
     for file in files: 
      f = open("/root/super/super/csv/"+file,'r') 
      allowed_domains = [url.strip() for url in f.readlines()] 
      f = open("/root/super/super/csv/"+file,'r') 
      start_urls = ['http://www.'+url.strip() for url in f.readlines()] 

      f.close() 

      rules = (Rule (LinkExtractor(allow=('(.*)[C-c]ontact','(.*)legal','(.*)mention','(.*)information'),deny=('(.*)='),restrict_xpaths=()), callback="parse_start_url", follow=False),) 

    def parse_start_url(self,response): 

Merci pour vos entrées!

Répondre

0

Vous remplacez la variable en boucle et c'est la raison pour laquelle le problème se produit. Vous devez utiliser append. Aussi allowed_domains prendra le nom de domaine et pas l'URL elle-même. Ci-dessous devrait le genre de travail pour vous

class mySuper(CrawlSpider): 
    name = "super" 

    allowed_domains = set() 

    rules = (Rule(
     LinkExtractor(allow=('(.*)[C-c]ontact', '(.*)legal', '(.*)mention', '(.*)information'), deny=('(.*)='), 
         restrict_xpaths=()), callback="parse_start_url", follow=False),) 

    def start_requests(self): 
     directory = os.path.join("c:\\", "/root/super/super/csv") 
     from urllib.parse import urlparse 

     for root, dirs, files in os.walk(directory): 
      for file in files: 
       f = open("/root/super/super/csv/" + file, 'r') 
       for url in f.readlines(): 
        domain = urlparse(url).netloc 
        self.allowed_domains.add(domain) 
        yield Request(url) 

       f.close() 

    def parse_start_url(self, response): 
     pass 
+0

Merci, j'essaie, mais a échoué: Traceback (appel le plus récent en dernier): Fichier « /usr/local/lib/python2.7/dist-packages/scrapy/core/engine .py ", ligne 127, dans _next_request request = next (slot.start_requests) Fichier" /root/super/super/spiders/mySuper.py ", ligne 74, dans start_requests self.allowed_domains.append (domaine) AttributeError: l'objet 'set' n'a pas d'attribut 'append' –

+0

Ahh J'ai changé de tableau pour définir ce dernier. Changer 'self.allowed_domains.append (domaine)' en 'self.allowed_domains.add (domaine)' –