3

Je suis un peu nouveau sur Python et très nouveau sur Scrapy.Pass Scrapy Spider une liste d'URL à explorer via le fichier .txt

J'ai mis en place une araignée pour explorer et extraire toutes les informations dont j'ai besoin. Cependant, je dois passer un fichier .txt d'URL à la variable start_urls.

Pour exmaple:

class LinkChecker(BaseSpider): 
    name = 'linkchecker' 
    start_urls = [] #Here I want the list to start crawling a list of urls from a text file a pass via the command line. 

Je l'ai fait un peu de recherche et de continuer à proposer les mains vides. J'ai vu ce type d'exemple (How to pass a user defined argument in scrapy spider), mais je ne pense pas que cela fonctionnera pour un passage d'un fichier texte.

Répondre

15

Lancez votre araignée avec -a option comme:

scrapy crawl myspider -a filename=text.txt 

Ensuite, lisez le fichier dans la méthode __init__ de l'araignée et définissent start_urls:

class MySpider(BaseSpider): 
    name = 'myspider' 

    def __init__(self, filename=None): 
     if filename: 
      with open(filename, 'r') as f: 
       self.start_urls = f.readlines() 

espoir qui aide.

3

vous pouvez simplement lire dans le fichier txt:

with open('your_file.txt') as f: 
    start_urls = f.readlines() 

si vous vous retrouvez avec caractères de fin de saut de ligne, essayez:

with open('your_file.txt') as f: 
    start_urls = [url.strip() for url in f.readlines()] 

Hope this helps

2

Si vos urls sont en ligne seperated

def get_urls(filename): 
     f = open(filename).read().split() 
     urls = [] 
     for i in f: 
       urls.append(i) 
     return urls 

alors cette lignes de code vous donnera les urls.

1
class MySpider(scrapy.Spider): 
    name = 'nameofspider' 

    def __init__(self, filename=None): 
     if filename: 
      with open('your_file.txt') as f: 
       self.start_urls = [url.strip() for url in f.readlines()] 

Ce sera votre code. Il ramassera les urls du fichier txt si elles sont séparées par des lignes, comme, url1 url2 etc ..

Après cette exécutez la commande ->

scrapy crawl nameofspider -a filename=filename.txt 

Disons que, votre nom de fichier est 'file.txt', puis exécutez la commande ->

scrapy crawl myspider -a filename=file.txt