【问题标题】:Scrappy empty csv/json杂乱无章的空 csv/json
【发布时间】:2018-06-29 15:13:48
【问题描述】:

我开始使用scrapy。我按照文档中的教程编写代码。当我运行输出 json 或 csv 时,输出的文件为空。当我在 shell 中测试我的选择器时,我得到了数据。我将发布我的代码:

import scrapy

class QuotesSpider(scrapy.Spider):
    name = "adororomance"
    start_urls = [
            'http://www.adororomances.com.br/arromances.php?cod=01',
            ]

    def parse(self, response):
        for livro in response.xpath('//*[@id="page_livro_coluna"]'):
            yield {
                    'titulo':
                    livro.xpath(
                        '//*[@id="page_livro_coluna"]/div[1]/h1/text()').extract_first(),
                    'autor(a)':
                    livro.xpath(
                        '//*[@id="page_livro_coluna"]/div[2]/span/a/span/h2/text()').extract_first(),
                    'titulo original':
                    livro.xpath(
                        '//*[@id="page_livro_coluna"]/div[3]/text()').extract_first(),
                    'coleção':
                    livro.xpath(
                        '//*[@id="page_livro_coluna"]/div[4]/h3/a/text()').extract_first(),
                    'publicação':
                    livro.xpath(
                        '//*[@id="page_livro_coluna"]/div[4]/div[1]/span[1]/text()').extract_first(),
                    'ano':
                    livro.xpath(
                        '//*[@id="page_livro_coluna"]/div[4]/div[1]/span[2]/text()').extract_first(),
                    'série':
                    livro.xpath(
                        '//*[@id="page_livro_coluna"]/div[4]/div[2]/a/span/text()').extract_first(),
                    'descrição':
                    livro.css(
                        '//*[@id="description"]/text()')
                      .extract_first(),
            }

通过测试,我发现'descrição' 正在破坏代码,如果我删除了 json 渲染。当我在 shell 中放置选择器时,我得到了:

['\r\n\t\t\t\t \r\n\t\t\t\t Ser sequestrada por um sheik árabe nem passou pela cabeça de Diane, ao visitar o deserto do Saara. Porém, foi o que aconteceu. Khasim ben Haran era um homem poderoso e arrogante, cujo único objetivo, ao fazer dela sua prisioneira, era vingar a morte da mãe. No entanto, esse mesmo homem que a aterrorizava, com ameaças cruéis, também a fascinava. E a figura altiva e exótica não saía da mente de Diane nem por um instante... \r\n                \r\n              ']

还有一个问题:这条换行符\r\n\t 会在我的json 中呈现吗?如果是,我怎样才能摆脱它们?

谢谢

【问题讨论】:

  • 您检查response.css 是否正在获取数据?还有你是如何运行爬取命令的?
  • 请看我编辑的回复!

标签: python-3.x scrapy scrapy-spider


【解决方案1】:

首先,livro.css('//*[@id="description"]/text()').extract_first(), 应该是 livro.xpath('//*[@id="description"]/text()').extract_first(),。在 css 选择器中使用 xpath 会引发异常,该异常会终止抓取过程,这可能是您在输出中没有得到任何内容的原因。

其次,像\r\n\t 这样的换行符将保留在您的 json 文件中,它们将根据您用于检查 json 文件的软件进行渲染或不渲染。如果要删除,可以使用strip() 函数:

livro.xpath('//*[@id="description"]/text()').extract_first().strip()

请注意,如果 xpath 找不到任何信息,它将返回 None 并且 strip() 将失败,在这种情况下,您必须添加额外的检查以确保该值不是 None

【讨论】:

  • 谢谢。更改为livro.xpath 有效。为了处理我所做的换行符:livro.xpath('normalize-space(//*[@id="description"]/text())').extract_first()
猜你喜欢
  • 1970-01-01
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
  • 2018-06-30
  • 1970-01-01
  • 2014-02-09
  • 2014-10-11
  • 2020-04-12
相关资源
最近更新 更多