Это расширение подхода, данного Сяаком Трехааком в этой теме.Пока этот подход работает, только если вы предоставите ровно один URL.Например, если вы хотите указать более одного URL-адреса, например:
-a start_url=http://url1.com,http://url2.com
, то Scrapy (я использую текущую стабильную версию 0.14.4) прекратит работу со следующим исключением:
error: running 'scrapy crawl' with more than one spider is no longer supported
Однако вы можете обойти эту проблему, выбрав различную переменную для каждого начального URL-адреса вместе с аргументом, который содержит количество переданных URL-адресов.Примерно так:
-a start_url1=http://url1.com
-a start_url2=http://url2.com
-a urls_num=2
Затем вы можете сделать следующее в своем пауке:
class MySpider(BaseSpider):
name = 'my_spider'
def __init__(self, *args, **kwargs):
super(MySpider, self).__init__(*args, **kwargs)
urls_num = int(kwargs.get('urls_num'))
start_urls = []
for i in xrange(1, urls_num):
start_urls.append(kwargs.get('start_url{0}'.format(i)))
self.start_urls = start_urls
Это несколько уродливый хак, но он работает.Конечно, утомительно явно записывать все аргументы командной строки для каждого URL.Поэтому имеет смысл обернуть команду scrapy crawl
в подпроцесс Python и сгенерировать аргументы командной строки в цикле или что-то в этом роде.
Надеюсь, это поможет.:)