2016-12-03 6 views
3

python 3의 마크 다운 파일에서 요소 목록을 어떻게 얻을 수 있습니까? 저는 특히 마크 다운 파일에서 모든 이미지 및 링크 목록 (alt-text 및 링크 텍스트와 같은 관련 정보와 함께)을 얻는 것에 관심이 있습니다.python의 마크 다운 파일에서 요소를 구문 분석 3

this이 지역의 일부 선행 기술이지만이 지점은 거의 정확히 2 살이지만 풍경이 조금 바뀌 었다고 생각합니다.

당신이 생각해내는 파서가 멀티 마크 다운을 지원한다면 보너스 포인트가 필요합니다.

+0

@coralv을의 URL, 대체 텍스트를 인쇄 할 수 있습니다 임의의 중첩 대괄호를 설명합니다. 파서를 만들기 전에 주로 라이브러리 솔루션을 찾고 있습니다. –

+0

Markdown 자체는 10 년이 넘게 변경되지 않았으므로 링크 된 질문과 답변은 꽤 최신이라고합니다. – Waylan

답변

1

Python-Markdown으로 마킹을 HTML로 변환 한 다음 Beautiful Soup을 사용하여 HTML 문서에서 원하는 것을 추출하면 이미지와 링크를 매우 쉽게 추출 할 수 있습니다.

이것은 복잡한 파이프 라인처럼 보일 수 있지만 정규 표현식을 사용하여 임시 markdown 파서를 작성하는 것보다 확실히 쉽고 강력합니다. 이 모듈은 전투 테스트를 거쳤으며 효율적입니다. 두 파이썬 패키지, pypandocpanflute을 활용할 경우

+0

Python-Markdown은 ElementTree를 내부적으로 사용하며 광범위한 확장 API를 가지고 있습니다. 파서를 중단하고 ElementTree 위로 반복하여 요소를 추출하고 몇 단계를 건너 뛸 수 있습니다. 그러나 이것은 의도하지 않은 방식으로 것들을 구부릴 것이기 때문에 HTML 출력을 파싱하는 것이 아마도 더 신뢰할만한 결과를 줄 것입니다. – Waylan

+0

Python-Markdown에는 확장 기능 ([included] (https://pythonhosted.org/Markdown/extensions/index.html#officially- supporteded-extensions)과 [third-party] (https : // github.com/waylan/Python-Markdown/wiki/Third-Party-Extensions))를 사용하면 MultiMarkdown의 모든 기능이 아닌 모든 기능을 사용할 수 있습니다. 그리고 정말로 신경 써야 할 기능이 없다면 [확장 기능을 직접 작성할 수 있습니다] (https://github.com/waylan/Python-Markdown/wiki/Tutorial:-Writing-Extensions-for-Python-Markdown). – Waylan

1

, 당신은 몇 줄에 매우 pythonically (sample code을)를 할 수있는 :

텍스트 파일 example.md을 감안할 때, 그리고 가정 파이썬이 3.3 이상 이미 pip install pypandoc panflute을 실행 한 다음 동일한 폴더에 샘플 코드를 놓고 쉘에서 실행하거나 게으른.

import io 
import pypandoc 
import panflute 

def action(elem, doc): 
    if isinstance(elem, panflute.Image): 
     doc.images.append(elem) 
    elif isinstance(elem, panflute.Link): 
     doc.links.append(elem) 

if __name__ == '__main__': 
    data = pypandoc.convert_file('example.md', 'json') 
    doc = panflute.load(io.StringIO(data)) 
    doc.images = [] 
    doc.links = [] 
    doc = panflute.run_filter(action, prepare=prepare, doc=doc) 

    print("\nList of image URLs:") 
    for image in doc.images: 
     print(image.url) 

단계는 다음과 같습니다

  1. 사용 pypandoc이 panflute이 스트림을 너무 필요의 (a 문서 객체를 생성 panflute로 인하 문서
  2. 로드가의 AST가 포함 된 JSON 문자열을 얻기 위해 우리는 StringIO를 사용합니다.
  3. run_filter 함수를 사용하여 모든 요소를 ​​반복하고 이미지 및 링크 객체를 추출합니다. 링크를 추출하는 정규식에 내가 검토 한 결과,하지만 난 정말 그것에 대해 자동 장치를 푸시을 필요로하는 문제로 실행 :
  4. 그런 다음 당신은 등