繁体   English   中英

将Scrapy Spider传递给要通过.txt文件进行爬网的URL列表

[英]Pass Scrapy Spider a list of URLs to crawl via .txt file

我是Python的新手,也是Scrapy的新手。

我已经设置了一个蜘蛛来抓取并提取我需要的所有信息。 但是,我需要将.txt文件的URL传递给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.

我做了一些研究,并且空手而归。 我已经看过这种类型的示例( 如何在scrapy spider中传递用户定义的参数 ),但我认为这不适用于传递文本文件。

使用-a选项运行您的蜘蛛,例如:

scrapy crawl myspider -a filename=text.txt

然后在spider的__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()

希望有所帮助。

你可以简单地读入.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()]

希望这可以帮助

如果您的网址是分开的

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

然后这行代码将为您提供网址。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM