Scrapy爬虫爬取IMDb电影标题无法逐行保存至CSV的问题求助
解决Scrapy爬取IMDb标题保存CSV的问题
问题根源
用.get()只会提取单个匹配元素,所以仅返回第一个电影标题;用.getall()会得到所有标题的列表,但Scrapy默认将列表作为单个字段值写入CSV,导致所有标题挤在同一单元格。
正确处理方式
核心是遍历.getall()获取的标题列表,为每个标题生成独立的Item对象,这样Scrapy会自动将每个Item对应为CSV的一行。
修改代码示例
假设你已定义基础Item类:
import scrapy class ImdbItem(scrapy.Item): title = scrapy.Field()
修改爬虫的parse方法:
def parse(self, response): # 替换为你实际使用的标题CSS/XPath选择器 title_list = response.css('td.titleColumn a::text').getall() # 遍历每个标题,生成单独的Item for title in title_list: # 方式1:直接生成字典(无需Item类也可) yield { 'title': title.strip() # 去除标题前后空白字符 } # 方式2:使用定义好的Item类 # item = ImdbItem() # item['title'] = title.strip() # yield item
注意事项
- 不要直接将整个标题列表赋值给Item字段,必须逐个遍历生成独立的Item。
- 用
strip()处理标题的前后空白,避免CSV中出现多余空格或换行符。
运行命令
保持你原有的命令即可:
scrapy crawl imdb_hm -O imdb.csv
执行后每个电影标题会单独占据CSV的一行,符合预期。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

