我有一只跑得很好的蜘蛛:
`# -*- coding: utf-8 -*-
import scrapy
class AllCategoriesSpider(scrapy.Spider):
name = 'vieles'
allowed_domains = ['examplewiki.de']
start_urls = ['http://www.exampleregelwiki.de/index.php/categoryA.html','http://www.exampleregelwiki.de/index.php/categoryB.html','http://www.exampleregelwiki.de/index.php/categoryC.html',]
#"Titel": :
def parse(self, response):
urls = response.css('a.ulSubMenu::attr(href)').extract() # links to den subpages
for url in urls:
url = response.urljoin(url)
yield scrapy.Request(url=url,callback=self.parse_details)
def parse_details(self,response):
yield {
"Titel": response.css("li.active.last::text").extract(),
"Content": response.css('div.ce_text.first.last.block').extract(),
}
在` 与
scrapy runspider spider.py -o dat.json it saves all info to dat.json
我希望每个起始url都有一个输出文件categoryA.json类别类别b.json等等。在
一个similar question没有回答,我无法复制this answer,我也无法从suggestions there学习。在
如何实现每个starturl有多个输出文件的目标? 我只想运行一个命令/shellscript/file来实现这一点。在
代码中没有使用真正的URL,所以我用我的页面进行测试。
我必须改变css选择器和我使用不同的字段。在
我将它保存为
csv
,因为它更容易附加数据。JSON
将需要从文件中读取所有项,添加新项并将所有项再次保存在同一文件中。在我创建了一个额外的字段
Category
,以便以后在管道中使用它作为文件名项目.py
在spider中,我从url获取类别并使用
Request
中的meta
发送到parse_details
。在
parse_details
中,我将category
添加到Item
。在蜘蛛/示例.py
^{pr2}$在管道中,我得到
category
,并使用它打开文件以附加和保存项。在管道.py
在设置中,我必须取消对管道的注释才能激活它。在
设置.py
GitHub上的完整代码:python-examples/scrapy/save-categories-in-separated-files
顺便说一句:我想你可以直接在
parse_details
中写入文件。在相关问题 更多 >
编程相关推荐