Scrapy:如何从设置文件中设置scrapy start_urls?

时间:2017-03-01 11:13:25

标签: scrapy scrapy-spider

通常情况下,您提供了硬编码start_urls,但如果我想一次提及某个列表网址会怎么样?

我知道我可以打开一个典型的文本文件,但想知道是否有一些 Scrapy方式来执行任务?

start_urls将保存在文件

2 个答案:

答案 0 :(得分:1)

假设您将配置文件放在spiders目录和config目录中。总路径scrapy_project -> spiders -> configs-> <spider_name>.txt

然后你可以覆盖你的蜘蛛的 init 来填充你的start_urls。

def __init__(self, *args, **kwargs):
    script_dir = os.path.dirname(__file__)
    abs_file_path = os.path.join(script_dir, "configs/%s.txt" % self.name)
    with open(abs_file_path) as f:
        self.start_urls  = [line.strip() for line in f.readlines()]

答案 1 :(得分:0)

可以这样做,但你必须修改蜘蛛的__init__()

from scrapy import Spider
class MySpider(Spider):
    name = 'start_urls'
    start_urls = ['http://google.com']

    def __init__(self, **kwargs):
        super(MySpider, self).__init__(**kwargs)
        if isinstance(self.start_urls, str):
            self.start_urls = self.start_urls.split(',')

    def parse(self, response):
        print(response.url)

现在你可以通过-a参数传递逗号分隔列表来修改start_urls:

scrapy crawl start_urls -a "start_urls=http://stackoverflow.com,http://httpbin.org"

不幸的是,AFAIK只能通过-a参数将参数作为字符串传递,因此您需要自己处理解释(在这种情况下,将字符串转换为列表,因为start_requests()遍历start_urls值,如果它是一个字符串它将遍历每个角色并打破)。