当我从HTML页面导出数据时,如何更改scrapy的代码,以便通过网址保存文件。
例如:
这个页面(http://example/big/ppp
)有很多页面链接
http://example/big/ppp/a
http://example/big/ppp/b
http://example/big/ppp/c
我想保存
中的数据 http://example/big/ppp/a
d:/ppp/a.csv
http://example/big/ppp/b
d:/ppp/b.csv
http://example/big/ppp/c
d:/ppp/c.csv
因为这个页面(http://example/big/ppp
)有很多类似的链接
http://example/big/ppp/a
,http://example/big/ppp/b
。
你能帮助我,善良的人!
答案 0 :(得分:0)
您可以使用scrapy管道来完成这项工作,在您要导出的项目中添加一个字段,例如名为' source' (http://example/big/ppp/a
)记录项目的来源:
from scrapy import signals
from scrapy.contrib.exporter import CsvItemExporter
class MyCsvPipeline(object):
def __init__(self):
self.csvfiles = {}
self.exporter = {}
@classmethod
def from_crawler(cls, crawler):
pipeline = cls()
crawler.signals.connect(pipeline.spider_closed, signals.spider_closed)
return pipeline
def close_spider(self, spider):
for e in self.exporter.values():
e.finish_exporting()
for f in self.csvfiles.values():
f.close()
def process_item(self, item, spider):
csv = item['source'].split('/')[-1] + '.csv'
if csv not in self.csvfiles:
newfile = open('d:/ppp/'+csv, 'wb')
self.csvfiles[csv] = newfile
self.exporter[csv] = CsvItemExporter(newfile)
self.exporter[csv].start_exporting()
self.exporter[csv].export_item(item)
return item
在settings.py中应用此管道
ITEM_PIPELINES = {
'xxxx.pipelines.MyCsvPipeline': 300,
}
另一种选择
使用scrapy crawl xxx -t csv -o all.csv --loglevel=INFO
将所有项目导出到csv,然后使用另一个脚本根据' source'将其分成小csv。