如何在Scrapy css中移除\r\n、空格并启用重音符号?

3
我是一个非常新手,希望您能轻松点。我已经谷歌了如何解决这个问题,但我得到的每个答案都适用于Xpath,而我正在使用CSS。
我正在按照这个教程进行操作,并到达了这一步:
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、大的空白和尝试提取带重音的单词时出现的错误(Resident Evil 6: O Último Capítulo 的原始文本为 Resident Evil 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 - paul trmbrth
我理解这不是一个错误,程序可以读取它。顺便说一句,我正在使用Notepad++来打开JSON文件。我应该使用另一个文本编辑器吗? - Lestat
1个回答

4
 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

本文介绍了在Scrapy中进行数据输出时的编码设置。可以通过修改FEED_EXPORT_ENCODING配置项来指定想要输出的编码格式。如果没有指定,默认使用UTF-8编码格式。改变编码格式可以确保输出的数据能够正常显示特殊字符,比如中文等。

工作得很好。但仍然无法接受重音符号。 {"name": "生化危机6:最终章"}, - Lestat
它没有起作用。我的setting.py:http://puu.sh/tGBcX.py 这个settings.py文件位于 C:\Python27\Lib\site-packages\scrapy\commands - Lestat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接