3

我對Python有點新,對Scrapy也很新。通過Scrapy Spider要通過.txt文件抓取的URL列表

我設置了一個蜘蛛抓取並提取所有我需要的信息。但是,我需要將URL的.txt文件傳遞給start_urls變量。

對於〔實施例:

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. 

我已經做了一點點研究,並保持未來空手而歸。我見過這種類型的例子(How to pass a user defined argument in scrapy spider),但我認爲這不適用於傳遞文本文件。

回答

15

運行您的蜘蛛與-a選項如:

scrapy crawl myspider -a filename=text.txt 

然後讀取文件中的蜘蛛__init__方法和定義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() 

希望有所幫助。

3

你可以簡單地讀入.txt文件:

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

如果你最終尾隨換行符,請嘗試:

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

希望這有助於

2

如果您的網址線分隔

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

那麼這個代碼行會給你的URL。

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()] 

這將是你的代碼。它會拿起從.txt文件的URL如果它們被行分隔,比如, URL1 URL2 等。

在此之後運行命令 - >

scrapy crawl nameofspider -a filename=filename.txt 

比方說,你的文件名是'file.txt',然後運行命令 - >

scrapy crawl myspider -a filename=file.txt