使用 Scrapy 写入多个文件
问题:使用 Scrapy 写入多个文件 我正在用 Scrapy 抓取一个网站,并希望将结果分成两部分。通常我这样称呼Scrapy: $ scrapy crawl articles -o articles.json $ scrapy crawl authors -o authors.json 两只蜘蛛完全独立,完全不交流。此设置适用于较小的网站,但较大的网站的作者太多,我无法像这样抓取。 我如何让a
·
问题:使用 Scrapy 写入多个文件
我正在用 Scrapy 抓取一个网站,并希望将结果分成两部分。通常我这样称呼Scrapy:
$ scrapy crawl articles -o articles.json
$ scrapy crawl authors -o authors.json
两只蜘蛛完全独立,完全不交流。此设置适用于较小的网站,但较大的网站的作者太多,我无法像这样抓取。
我如何让articles
蜘蛛告诉authors
蜘蛛要抓取哪些页面并维护这个两文件结构?理想情况下,我宁愿不将作者 URL 写入文件,然后与其他蜘蛛一起读回。
解答
我最终为作者刮板使用了命令行参数:
class AuthorSpider(BaseSpider):
...
def __init__(self, articles):
self.start_urls = []
for line in articles:
article = json.loads(line)
self.start_urls.append(data['author_url'])
然后,我添加了Scrapy 文档中概述的重复管道:
from scrapy import signals
from scrapy.exceptions import DropItem
class DuplicatesPipeline(object):
def __init__(self):
self.ids_seen = set()
def process_item(self, item, spider):
if item['id'] in self.ids_seen:
raise DropItem("Duplicate item found: %s" % item)
else:
self.ids_seen.add(item['id'])
return item
最后,我将文章 JSON 行文件传递到命令中:
$ scrapy crawl authors -o authors.json -a articles=articles.json
这不是一个很好的解决方案,但它有效。
更多推荐
已为社区贡献126475条内容
所有评论(0)