Python - конфликт кодировки Unicode - PullRequest
0 голосов
/ 27 августа 2018

Обновление - я попытался включить полный путь к заданию crontab, но та же проблема повторяется ... У меня проблема только с этой конкретной статьей, которая содержит латинский символ "Moët"

Я новичокв Python 3, и мне нужна помощь с проблемой, связанной с «конфликтом кодировки Юникода».

Я создаю веб-скребок, который берет онлайн-статьи и сохраняет их локально.

Что я хотел бы сделатьis:

  • используйте 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)

Затем я использую запланированное задание crontab Centos 7, чтобы оно запускалось автоматически.он будет каждый день обнаруживать один и тот же веб-URL и пытаться перехватить новую статью как текстовый файл.

Он работал нормально, однако сегодня я заметил, что он не работает для заголовка статьи, который содержит латинский символ.В идеале система напечатает «файл существует» и перейдет к следующей статье, однако показывает, что программа создала несколько дублирующих статей:

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

Очень признателен, если кто-нибудь может помочь.

Повар

1 Ответ

0 голосов
/ 27 августа 2018

Crontab, скорее всего, использовал урезанную среду, что может привести к неожиданному поведению.См. this , это, скорее всего, решит вашу проблему.

Обычно вам нужно указать полный путь к исполняемому файлу Python (вы можете получить его, запустив which python).Следовательно, запись в crontab будет выглядеть следующим образом:

20 4 * * * your_python_path your_program_path.py
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...