Scrapy:如何通过命令提示符向爬虫传递参数列表?

8
创建一个用于幻想团队的爬虫。寻找一种方法将球员名称列表作为参数传递,并在player_list中的每个player_name上运行解析代码。
我目前有类似以下的东西
class statsspider(BaseSpider):
name = 'statsspider'

def __init__ (self, domain=None, player_list=""):
    self.allowed_domains = ['sports.yahoo.com']
    self.start_urls = [
        'http://sports.yahoo.com/nba/players',
    ]
    self.player_list= "%s" % player_list


def parse(self, response):
    example code
    yield request

我假设输入参数列表与通过命令行输入一个参数相同,因此我输入类似于这样的内容:

scrapy crawl statsspider -a player_list=['xyz','abc']

问题2!

通过输入逗号分隔的参数列表解决了第一个问题,例如:

scrapy crawl statsspider -a player_list="abc def,ghi jkl"

我现在想要遍历每个“name”(即“abc def”),以查找他们姓氏的首字母(在本例中为“d”)。
我使用以下代码:
array = []
for player_name in self.player_list:
    array.append(player_name)
print array

我最终得到了结果[["'",'a','b','c',... etc]],为什么Python没有将player_name分配给每个“name”(例如“abc def”和“ghi jkl”)? 有人能解释一下这个逻辑,然后我可能会明白正确的做法!


刚刚试了一下,在Ubuntu上没有出现错误,scrapy版本为0.18.4,你用的是哪个版本? - Guy Gavriely
我意识到我通过命令行传递参数时弄错了。请参考@kev的答案!但现在我遇到了一个新问题。 - Python Learner
1个回答

16

Shell参数是基于字符串的。您需要在代码中解析参数。

命令行:

scrapy crawl statsspider -a player_list=xyz,abc

Python代 码:

self.player_list = player_list.split(',')

嘿@kev,谢谢回复!我现在知道如何将列表传递到命令行。它起作用了,但现在我有一个新问题,我不明白python的逻辑。如果您能看到附加的“问题2”,那将不胜感激! - Python Learner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接