是的 - 为每个站点编写一个蜘蛛都有点痛苦,特别是如果有100个和所有这些蜘蛛都是相同的。
如果它适合您的需要,您可能希望将每个站点的XPath存储在一个文件中,例如一个csv file。如果你需要你的蜘蛛释放到例如
def start_requests(self):
with open(getattr(self, "file", "todo.csv"), "rU") as f:
reader = csv.DictReader(f)
for line in reader:
request = Request(line.pop('url'))
request.meta['fields'] = line
yield request
def parse(self, response):
xpath = response.meta['fields']['tablexpath']
... use xpath it to extract your table
:然后你就可以从CSV获取URL和表达,并在您的蜘蛛使用它们(改编自here) scrapyd或scrapinghub,您需要将您的.csv文件与您的代码一起打包。要做到这一点,你将不得不修改setup.py
是shub deploy
或scrapyd-client
产生并添加:
setup(
...
package_data={'myproject': ['my_csv.csv']}
)
而且在你的蜘蛛,而不是直接与open
打开你的文件,你应该使用这样的:
from pkg_resources import resource_stream
f = resource_stream('myproject', 'my_csv.csv')
这是example。如果你不部署你的蜘蛛,只要忽略上述。如果你这样做会为你节省几个小时的调试时间。