python - unicode编码冲突

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python - unicode编码冲突相关的知识,希望对你有一定的参考价值。

更新 - 我试图包含crontab作业的完整路径,但同样的问题再次发生...我只对这篇包含拉丁字符“Moët”的特定文章有疑问

我是python 3的新手,我需要有关“unicode编码冲突”相关问题的帮助。

我正在创建一个Web抓取工具,它可以获取在线文章并将其保存在本地。

我想做的是:

  • 使用Beautifulsoup获取文章标题
  • 检查文章标题不在本地保存的文章列表中
  • 如果标题匹配,则打印“文件存在”不执行任何操作。
  • 如果标题不匹配,则捕获文章内容并生成.txt文件。

代码如下:

article_html = self.request(articles_URL)
soup = BeautifulSoup(article_html.text, 'html.parser')
title_modify = soup.title.string
title_real = title_modify + '.txt'
current_path = os.getcwd()
article_names = os.listdir(current_path)
if title_real in article_names:
    print(title_real, 'exists, no need to re-create')
else:
###omit codes for catching article content
    with codecs.open(title_real, "a", encoding='utf-8') as f:
        f.write(XXX)

然后我使用预定的Centos 7 crontab作业让它自动运行。它将每天检测相同的Web URL,并尝试将新文章作为txt文件捕获。

它工作正常,但今天我发现它不适用于包含拉丁字符的文章标题。理想情况下,系统将打印“文件存在”并转到下一篇文章,但是,它显示程序创建了一些重复的文章:

Aug 26 09:50 XXX with Moët XXX.txt

Aug 27 09:29 XXX with Moët XXX (Unicode Encoding Conflict (1)).txt

Aug 26 20:30 XXX with Moët xxx (Unicode Encoding Conflict).txt

奇怪的是,当我手动运行python脚本时,它工作正常:

python test.py

XXX with Moët XXX.txt exists, no need to re-create

非常感谢,如果有人可以提供帮助。

厨师

答案

Crontab最有可能使用可能导致意外行为的精简环境。请参阅this,它很可能会解决您的问题。

基本上你需要提供你的python可执行文件的完整路径(你可以通过运行which python来获得它)。你会看到crontab条目如下所示:

20 4 * * * your_python_path your_program_path.py

以上是关于python - unicode编码冲突的主要内容,如果未能解决你的问题,请参考以下文章

UTF和Unicode区别

Python字符串和编码

python大法好——编码.文件

使用非utf-8编码在Python中解析XML

Python3的unicode编码转换成中文问题

python3中的编码问题