是的 - 爲每個站點編寫一個蜘蛛都有點痛苦,特別是如果有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。如果你不部署你的蜘蛛,只要忽略上述。如果你這樣做會爲你節省幾個小時的調試時間。