DevTip#3: 메모를 Joplin으로 가져오기 위해 HTML을 제거하고 마크다운으로 변환




▶ 배경 ↑top



이 문서에서 Joplin으로 메모를 가져오는 방법에 대해 구체적으로 언급했지만 제시된 단계는 일반적입니다. 이 문서를 최대한 간결하게 유지하기 위해 메모 내보내기 및 가져오기에 대한 대부분의 세부 정보가 생략되었습니다. HTML을 정리하고 Markdown으로 변환하는 단계를 찾고 있다면 바로 Solution 으로 건너뛰십시오.

나는 OneNote, Evernote, Leanote을 노트 필기 소프트웨어로 사용하고 있었습니다. OneNote는 주로 개인 메모에 사용되는 반면 Evernote는 업무에 사용됩니다. 나중에 Evernote에서 자체 호스팅 Leanote로 전환하여 지난 2~3년 동안 사용했습니다.

이제 OneNote와 Leanote 콘텐츠를 모두 한 곳으로 통합할 계획입니다. 결국 Joplin 에 정착하기로 했습니다. 이 문서는 전체 내보내기 및 가져오기 메모 프로세스의 일부에 중점을 둡니다. 자세한 내용은 아래 Solution 섹션에 나와 있습니다.


🛑 문제 설명 ↑top



빠른 웹 검색은 OneNote 및 Leanote를 Joplin으로 가져오는 방법에 대한 결과를 반환합니다. 검색 결과의 방법은 간단한 메모 형식에 대해 상당히 잘 작동하지만 메모에 테이블, 이미지, 스타일, 중첩 구조 및 이들 모두의 조합이 포함되면 가져온 메모가 엉망으로 보입니다.


📜 솔루션 ↑top



몇 번의 시행착오 끝에 다음 워크플로가 가장 잘 작동합니다.
  • OneNote 및 Leanote의 모든 메모를 HTML로 내보내기,
  • srchref(이미지 소스 및 링크에 대해 유지)를 제외한 모든 HTML 속성 제거,
  • 다음으로 Markdown으로 변환합니다.
  • 마침내 내장된 가져오기를 사용하여 모든 마크다운 메모를 Joplin으로 가져옵니다.

  • 이 기사에서는 HTML을 삭제하고 마크다운으로 변환하는 두 가지 중간 단계에 중점을 둘 것입니다.

    1️⃣ 1단계 ↑top



    일반적인 HTML에는 script , id , class , style , 데이터 속성 및 훨씬 더 많은 기타 HTML 태그/속성이 포함됩니다. 이들 대부분은 Markdown에서 지원되지 않기 때문에 모든 HTML 태그/속성을 제거하고 필요한 것 중 일부만 남겨두면 나중에 마크다운이 크게 출력됩니다.

    Beautiful Soup 4이 이 단계에 사용됩니다. 아래 명령은 pip를 사용하여 python 라이브러리를 설치합니다.

    pip install beautifulsoup4
    


    설치 후 아래 코드 예제를 실행하면 srchref 를 제외한 모든 HTML 속성이 제거되고 모든 scriptstyle 태그가 제거됩니다. 나는 또한 이 솔루션을 this SO Q&A 에 게시했습니다.

    # https://beautiful-soup-4.readthedocs.io/en/latest/#searching-the-tree
    from bs4 import BeautifulSoup, NavigableString
    
    def unstyle_html(html):
        soup = BeautifulSoup(html, features="html.parser")
    
        # remove all attributes except for `src` and `href`
        for tag in soup.descendants:
            keys = []
            if not isinstance(tag, NavigableString):
                for k in tag.attrs.keys():
                    if k not in ["src", "href"]:
                        keys.append(k)
                for k in keys:
                    del tag[k]
    
        # remove all script and style tags
        for tag in soup.find_all(["script", "style"]):
            tag.decompose()
    
        # return html text
        return soup.prettify()
    


    2️⃣ 2단계 ↑top



    위생 HTML에서 Markdown으로 변환하기 위해 pandoc이 사용됩니다. 이것은 명령줄 도구이며 Python에서 pandoc을 더 쉽게 사용할 수 있도록 pip를 사용하여 외부 라이브러리를 설치합니다.

    pip install pypandoc
    


    설치 후 아래 코드 스니펫은 pypandoc을 호출하여 HTML을 Markdown으로 변환하는 방법을 보여줍니다.

    pypandoc.convert_file(html_path,
        'markdown+pipe_tables+backtick_code_blocks-markdown_attribute',
        format='html',
        outputfile=md_path)
    


    이 pandoc 문서는 all the supported input and output formats 을 보여줍니다. 형식 뒤의 '더하기' 및 '빼기' 문자열이 궁금하다면 각각 pandoc 확장을 추가하거나 제거하기 위한 것입니다. 이러한 확장을 사용하여 생성된 Markdown 파일은 가장 잘 가져온 Joplin 메모를 제공합니다. 확장에 대한 자세한 내용은 this section을 확인하십시오.


    ✉ 요약 ↑top


  • 불필요한 HTML 태그 및 속성을 삭제하기 위해 Beautiful Soup 4 사용
  • pandoc을 사용하여 HTML을 Markdown으로 변환합니다.
  • 좋은 웹페이지 즐겨찾기