파이썬 크롤링시 날짜 에러 해결하기

파이썬에서 웹 크롤링을 할때 날짜 관련된 에러가 발생할 경우가 있습니다.

크롤링시 Datetime 에러

먼저 살펴볼 것은 파이썬의 datetime이 지원하지 않는 포맷이어서 발생하는 에러입니다.

datetime은 파이썬에서 날짜와 시간을 표현하는 패키지 입니다.

아래와 같이 엑셀에서 지원하지 않는 형식이라고 하는데요.

 Excel does not support datetimes with timezones.

  File "C:\python\lib\site-packages\pandas\core\generic.py", line 2284, in to_excel    formatter.write(  File "C:\python\lib\site-packages\pandas\io\formats\excel.py", line 840, in write    writer.write_cells(  File "C:\python\lib\site-packages\pandas\io\excel\_openpyxl.py", line 457, in write_cells    for cell in cells:  File "C:\python\lib\site-packages\pandas\io\formats\excel.py", line 778, in get_formatted_cells    cell.val = self._format_value(cell.val)  File "C:\python\lib\site-packages\pandas\io\formats\excel.py", line 526, in _format_value    raise ValueError(ValueError: Excel does not support datetimes with timezones. Please ensure that datetimes are timezone unaware before writing to Excel.

이 경우에 해당 데이터를 datetime함수를 import 한 다음

아래와 같이 엑셀에서 지원하는 포맷으로 변경하여 해결이 가능합니다.

import datetime

df['date'] = df['date'].apply(lambda a: pd.to_datetime(a).date())

파이썬 지원하지 않는 글자 에러

위의 에러는 날짜 포맷이 맞지 않는 경우인데요.

또 유사한 에러로 openpyxl.utils.exceptions.illegalCharacterError도 종종 크롤링한 결과를 받다보면 발생합니다.

이 역시 엑셀에서 지원하지 않는 글자가 있는 경우에 발생하게 됩니다.

즉 보이지 않는 어떤 문자가 엑셀에서 지원하지 않는 문자이기 때문입니다.

openpyxl.utils.exceptions.IllegalCharacterError

  File "C:\python\lib\site-packages\pandas\core\generic.py", line 2284, in to_excel
    formatter.write(
  File "C:\python\lib\site-packages\pandas\io\formats\excel.py", line 840, in write
    writer.write_cells(
  File "C:\python\lib\site-packages\pandas\io\excel\_openpyxl.py", line 461, in write_cells
    xcell.value, fmt = self._value_with_fmt(cell.val)
  File "C:\python\lib\site-packages\openpyxl\cell\cell.py", line 215, in value
    self._bind_value(value)
  File "C:\python\lib\site-packages\openpyxl\cell\cell.py", line 194, in _bind_value
    value = self.check_string(value)
  File "C:\python\lib\site-packages\openpyxl\cell\cell.py", line 162, in check_string
    raise IllegalCharacterError
openpyxl.utils.exceptions.IllegalCharacterError

이 경우에 해당 택스트를 re 패키지로 치환해줘야 하는데요.

만약 text1이 문제가 된다면 아래와 같은 코드를 통해서 에러를 해결할 수 있습니다.

import re
from openpyxl.cell.cell import ILLEGAL_CHARACTERS_RE

text1 = ILLEGAL_CHARACTERS_RE.sub(r'',text1)

이 경우 역시 이렇게 설정을하면 아무 문제없이 제대로 실행됨을 알 수 있습니다.

크롤링을 하다보면 여러가지 에러가 발생하는 경우가 종종 있는데요.

에러 메시지를 구글링을 하시면 편하게 해결할 수 있습니다.

그럼 잘 사용하시기 바랍니다.