Scrapy导出CSV数据全在一行?求解决(期望8行4列格式)
Scrapy导出CSV数据全部在一行的问题解决
问题根源
- XPath路径错误:循环内部的XPath使用
//开头的绝对路径,每次都会从整个HTML文档根节点开始查询,导致每轮循环都获取到页面上所有的帖子、投票数等数据,而非当前遍历的单个帖子节点下的数据。 - 数据提取方式不当:
extract()方法会返回所有匹配结果的列表,而你需要的是单条数据,应该使用get()(Scrapy 2.0+)或extract_first()来获取单个值。
修正后的代码
import scrapy class MyredditSpider(scrapy.Spider): name = 'myreddit' allowed_domains = ['reddit.com'] start_urls = ['http://www.reddit.com/'] # custom_settings = { # "FEEDS":{"result.csv":{"format":"csv",}} # } def parse(self, response): all_var = response.xpath("//div[@class='rpBJOHq2PR60pnwJlUyP0']") for variable in all_var: # 使用./开头的相对路径,仅在当前variable节点下查询 post = variable.xpath("./h3[@class='_eYtD2XCVieq6emjKBH3m']/text()").get() vote = variable.xpath("./div[@class='_1rZYMD_4xY3gRcSS3p8ODO _3a2ZHWaih05DgAOtvu6cIo ']/text()").get() time = variable.xpath("./span[@class='_2VF2J19pUIMSLJFky-7PEI']/text()").get() links = variable.xpath("./a[@data-click-id='body']/@href").get() yield {"Posts": post, "Votes": vote, "Time": time, "Links": links}
说明
修正后重新执行导出命令:
scrapy crawl myreddit -o items.csv
此时CSV会生成8行4列的格式,每行对应一条帖子数据。
内容的提问来源于stack exchange,提问作者S_Naghiyeva
相关产品推荐
相关产品推荐

