我正在尝试使用scrapy编写一个接受输入参数的刮板。init方法如下:
def __init__(self, inputfile="input.csv", *args, **kwargs):
super(DemoSpider, self).__init__(*args, **kwargs)
custom_settings = {
'ITEM_PIPELINES': {
'ScrapySpider.pipelines.PostProcessingHtml': 300,
'ScrapySpider.pipelines.GetShortDesc': 301,
# 'ScrapySpider.pipelines.Database': 302
}
}
#Reading input file to get the input data
InputData = ReadParamsFromCSV(inputfile)
start_urls = []
rules = []
for i in range(0, len(InputData)):
# for i in range(1, 2):
start_urls += [InputData[i][0]]
rules.append(
Rule(LinkExtractor(allow=InputData[i][1]),
callback='parse_items',
cb_kwargs={'InputData': InputData[i]},
follow=True))此代码不会回调parse_items函数。这里我漏掉了什么?我找不到很多关于init方法本身的细节,所以我不确定我应该在这里返回什么。
发布于 2021-11-09 11:44:51
你需要在“超级”之前设置规则。
另外,custom_settings和start_urls需要是一个类属性。
(您也可以更新custom_settings,但是如果您不需要动态更改它,那么将它从init函数中删除会更容易)。
custom_settings = {
'ITEM_PIPELINES': {
'ScrapySpider.pipelines.PostProcessingHtml': 300,
'ScrapySpider.pipelines.GetShortDesc': 301,
# 'ScrapySpider.pipelines.Database': 302
}
}
def __init__(self, inputfile="input.csv", *args, **kwargs):
#Reading input file to get the input data
InputData = ReadParamsFromCSV(inputfile)
self.start_urls = []
rules = []
for i in range(0, len(InputData)):
# for i in range(1, 2):
self.start_urls += [InputData[i][0]]
rules.append(
Rule(LinkExtractor(allow=InputData[i][1]),
callback='parse_items',
cb_kwargs={'InputData': InputData[i]},
follow=True))
super(DemoSpider, self).__init__(*args, **kwargs)https://stackoverflow.com/questions/69878664
复制相似问题