【问题标题】:How to remove \r\n, white spaces and enable accents in Scrapy css?如何在 Scrapy css 中删除 \r\n、空格并启用重音符号?
【发布时间】:2017-01-30 08:38:47
【问题描述】:

我是非常初学者,所以放轻松。 我用谷歌搜索了如何解决它,但我得到的每个答案都是针对 Xpath 的,而且我正在使用 CSS。

我正在关注本教程https://hexfox.com/p/scrape-your-cinemas-listings-to-get-a-daily-email-of-films-with-a-high-imdb-rating/ 并达到了这一点:

import scrapy

class CinemaSpider(scrapy.Spider):
    name = "cinema"
    allowed_domains = ['cineroxy.com.br']
    start_urls = [
        'http://cineroxy.com.br/programacao-brisamar',
    ]

    def parse(self, response):
        movie_names = response.css('.titulo p::text').extract()
        for movie_name in movie_names:
            yield {
                'name': movie_name
            }

我已经正确执行,所以它会获取信息并创建一个 json 文件:

C:\Python27\Scripts>scrapy runspider cinema_scraper.py -o movies.json

但结果是这样的:

[
{"name": "\r\n                                        A Bailarina\r\n                                    "},
{"name": "\r\n                                        Assassins Creed - O Filme\r\n                                    "},
{"name": "\r\n                                        Cinquenta Tons Mais Escuros\r\n                                    "},
{"name": "\r\n                                        Minha M\u00e3e \u00e9 uma Pe\u00e7a 2\r\n                                    "},
{"name": "\r\n                                        Moana - Um Mar de Aventura\r\n                                    "},
{"name": "\r\n                                        Os Penetras 2 - Quem D\u00e1 Mais?\r\n                                    "},
{"name": "\r\n                                        Quatro Vidas de Um Cachorro\r\n                                    "},
{"name": "\r\n                                        Resident Evil 6: O \u00daltimo Cap\u00edtulo\r\n                                    "},
{"name": "\r\n                                        xXx: Reativado\r\n                                    "}
]

现在,我有 3 个问题要解决输出/提取问题:\r\n、大空白和尝试提取重读单词时的错误(生化危机 6:O \u00daltimo Cap\u00edtulo 原作是生化危机6:O Último Capítulo)。

这个网站的源代码与我研究过的其他网站的不同之处在于,它在写标题之前少了一行:

<a href='../filme/resident-evil-6-o-ultimo-capitulo'>
    <img id="cphConteudo_rptBusca_imgFilme_7" title="Resident Evil 6: O Último Capítulo" class="img" src="http://www.cineroxy.com.br/suiteinstitucional/arquivos/filmes/040920161914411.jpg" />
    <div class="titulo">
        <p>
            Resident Evil 6: O Último Capítulo
        </p>
    </div>
<div class="passar-mouse">
    clique para ver os horários <img src="Arquitetura/Imagens/Icones/drop.png" alt="" />
</div>
</a>

很抱歉,这篇文章太长了,可能会出现巨大的愚蠢错误。 提前致谢。

【问题讨论】:

  • 请注意,JSON 输出中的 \uXXXX 序列不是错误,它有效的 JSON 语法,是表示非 ASCII 字符的一种简单方式。兼容 JSON 的阅读器/程序可以很好地理解那些 \uXXXX 序列;另一方面,人类读者可能不会。 FEED_EXPORT_ENCODING 在答案之一中设置提及将写入 UTF-8 编码字符,而不会 \uXXXX 转义。许多文本编辑器/查看器会将 JSON 文本文件中的 \xc3\x9a 序列(\u00da 的 UTF-8 编码)解码为 Ú,但仍会被解释。人类仍然很难理解\xc3\x9a
  • 我不明白这不是一个错误,程序可以读取它。顺便说一句,我正在使用 Notepad++ 打开 JSON。我应该使用其他文本编辑器吗?

标签: css web-scraping scrapy


【解决方案1】:
 yield {
                'name': movie_name.strip()
            }

代码:

"\r\n                                        A Bailarina\r\n                                    ".strip()

出来:

'A Bailarina'

strip() 将去掉前导和尾部空格

json:

即在你的settings.py中添加:

FEED_EXPORT_ENCODING = 'utf-8'

文档:https://doc.scrapy.org/en/1.2/topics/feed-exports.html#feed-export-encoding

【讨论】:

  • 工作优雅。但仍然不接受口音。 {"name": "Resident Evil 6: O \u00daltimo Cap\u00edtulo"},,
  • 它没有用。我的setting.py:puu.sh/tGBcX.py这个settings.py位于C:\Python27\Lib\site-packages\scrapy\commands
猜你喜欢
  • 1970-01-01
  • 2014-12-11
  • 1970-01-01
  • 2018-05-16
  • 2011-12-11
  • 2011-06-16
  • 1970-01-01
  • 2015-08-30
相关资源
最近更新 更多