如何让for循环仅返回前3条结果?Scrapy爬取IMDb全量250条需限制输出数量
解决办法
你可以通过以下两种方式实现仅输出前3条爬取结果:
方法1:直接对循环列表切片(操作最简单,推荐)
response.css()返回的是可迭代的选择器列表,直接使用Python切片语法截取前3个元素即可,修改后的parse方法代码如下:
def parse(self, response): # 仅选择前3个电影链接 for i in response.css('.titleColumn a')[:3]: movie_name = i.css('::text').get() movie_url = i.css('::attr(href)').get() meta_dict = {'movie': movie_name} yield response.follow(movie_url, callback=self.parse_info, meta=meta_dict)
注:原代码中使用
dict作为变量名会覆盖Python内置的dict关键字,建议修改为其他名称如meta_dict避免潜在问题。
方法2:通过Scrapy配置限制总输出条数
如果不想改动爬虫业务逻辑,可以直接在Scrapy项目的settings.py文件中添加如下配置:
CLOSESPIDER_ITEMCOUNT = 3
添加后爬虫会在成功获取到3条Item结果后自动停止运行。
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

