【发布时间】:2018-01-19 10:11:55
【问题描述】:
我有一个模式列表:
patterns_trees = [response.css("#Header").xpath("//a/img/@src"),
response.css("#HEADER").xpath("//a/img/@src"),
response.xpath("//header//a/img/@src"),
response.xpath("//a[@href='"+response.url+'/'+"']/img/@src"),
response.xpath("//a[@href='/']/img/@src")
]
在我遍历它并找到正确的模式后,我必须将模式作为参数发送给回调函数
for pattern_tree in patterns_trees:
...
pattern_response = scrapy.Request(...,..., meta={"pattern_tree": pattern_tree.extract_first()})
通过这样做,我得到了正则表达式的值而不是模式
我尝试过的事情:
我尝试将模式隔离在一个单独的类中,但仍然存在无法将它们存储为模式而是值的问题。
我尝试将它们保存为字符串,也许我可以让它工作,但是
存储函数列表最有效的方法是什么
更新:可能的解决方案,但过于硬编码,当我想添加更多模式时问题太大:
def patter_0(response):
response.css("#Header").xpath("//a/img/@src")
def patter_1(response):
response.css("#HEADER").xpath("//a/img/@src")
.....
class patternTrees:
patterns = [patter_0,...,patter_n]
def length_patterns(self):
return len(patterns)
【问题讨论】:
-
特定模式是否应该与特定功能相关联?
-
在
meta你发送.extract_first(),括号会导致它执行。尝试发送.extract_first(不带括号)来发送实际函数。 -
@Magnus 是的,我希望每个模式都有一个特定的函数,以便我可以向它发送参数
-
@Swier 不,这不是问题,有或没有那个函数
pattern_tree已经是一个计算结果 -
您可以使用对象
response是一个实例来访问其方法。对于字符串,您可以这样做:[str.upper, str.lower][0]('test')->'TEST'
标签: python python-3.x list function reference