【问题标题】:After .csv export items in one cell only.csv 后仅在一个单元格中导出项目
【发布时间】:2018-05-12 17:37:38
【问题描述】:

具备以下条件:

import scrapy

class ScrapeMovies(scrapy.Spider):
    name='final'

    start_urls = [
        'https://www.trekearth.com/members/'
    ]

    def parse(self, response):
        for entry in response.xpath('//table[@class="member-table"]'):
            yield{
                'name': entry.xpath('.//tr[@class="row"]/td/p/a/text()').extract()
            }

我想在单个页面上提取用户的名称,但是在 .csv 导出名称在一个单元格中之后。如何改变它?最合适的方法是什么?

我在运行爬虫时只需添加 -o file.csv 即可将文件保存为 csv。

我收到的输出在第 1 行。

我想要的输出或多或少像从 3 到 5 的行。

请进一步解释为什么这个问题值得一票否决?为了提高我的问题的质量,我想知道这一点。

【问题讨论】:

  • 保存到csv的代码是什么?
  • 您必须提供minimal reproducible example。没有一个,你的问题就离题了。
  • 问题已更新,如果需要添加任何内容以使此问题更完整,请通知我。感谢您的建议
  • @UlrichEckhardt 要改进什么?
  • 您的代码定义了一个类,但它没有做任何事情。考虑提供一个人们可以运行的 sn-p。此外,请确保您提供不需要解释的可观察事实。在这种情况下,您的“名字在一个单元格中”是不好的,只显示输出和预期的输出。

标签: python web-scraping scrapy


【解决方案1】:

看起来像

entry.xpath('.//tr[@class="row"]/td/p/a/text()').extract()

实际上是一个名字列表。

尝试迭代它并为每个名称产生一个项目:

import scrapy

class ScrapeMovies(scrapy.Spider):
    name='final'

    start_urls = [
        'https://www.trekearth.com/members/'
    ]

    def parse(self, response):
        for entry in response.xpath('//table[@class="member-table"]'):
            for name in entry.xpath('.//tr[@class="row"]/td/p/a/text()').extract():
                yield {'name': name}

【讨论】:

  • 按预期工作。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多