본문 바로가기

D.S/Python

210805목 - python-docx 하이퍼링크 얻어내기

728x90

 

문제

파이썬으로 docx 문서를 paragraph.text로 가져오는데 이 아이가 하이퍼링크를 못 가져오네..? 그래서 어떻게 가져오는지 찾아보았다. docx가 xml 문서였구나.. xml 알못..

 

해결

문서에서 문단으로 접근해서 text 가져오기와 문단에서 hyper링크 추출하기. 스택오버플로우 답변을 참조해서 xml을 먼저 출력해본다음 가져옴. 지금 프로젝트 코드에서 추출.

 

스택오버플로우 답변

 

참조해서 내 문서의 문단 xml을 출력하고 하이퍼링크가 들어간 문단부분의 xml을 살펴봄.

doc = docx.Document(text_[0])

for docpara in doc.paragraphs:
	
    # 문단 xml 출력해줌
    print(docpara._p.xml) 
    
    # 문단 안에 하이퍼링크 출력
    print(docpara._p.xpath("./w:hyperlink//w:r//w:t/text()")) 
    
    # 하이퍼링크 그냥 .text하면 값 안 들어감.
    hlink = docpara._p.xpath("./w:hyperlink//w:r//w:t/text()")
    
    lines.append(str(docpara.text)+'\n')
    
    if hlink:
        # print(str(docpara.text))
        lines.append(','.join(hlink)+'\n')

 

 

 

위 for문 print부분 결과에서 하이퍼링크 들어가 있는 부분만 추출해보면

# 아..문단 xml 출력해줌
print(docpara._p.xml)

# 문단 안에 하이퍼링크 출력
print(docpara._p.xpath("./w:hyperlink//w:r//w:t/text()"))

 

 

<w:p xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:cx="http://schemas.microsoft.com/office/drawing/2014/chartex" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" w:rsidR="00922F3E" w:rsidRDefault="00922F3E" w:rsidP="00C93F9C">
  <w:pPr>
    <w:pStyle w:val="a3"/>
    <w:rPr>
      <w:rFonts w:ascii="돋움" w:eastAsia="돋움" w:cs="돋움"/>
      <w:color w:val="000000"/>
      <w:kern w:val="0"/>
      <w:sz w:val="18"/>
      <w:szCs w:val="18"/>
      <w:lang w:val="ko-KR"/>
    </w:rPr>
  </w:pPr>
  <w:hyperlink r:id="rId4" w:history="1">
    <w:r w:rsidRPr="000C4B4E">
      <w:rPr>
        <w:rStyle w:val="a4"/>
        <w:rFonts w:ascii="돋움" w:eastAsia="돋움" w:cs="돋움"/>
        <w:kern w:val="0"/>
        <w:sz w:val="18"/>
        <w:szCs w:val="18"/>
        <w:lang w:val="ko-KR"/>
      </w:rPr>
      <w:t>http://japantop.co.kr</w:t>
    </w:r>
  </w:hyperlink>
</w:p>

['http://japantop.co.kr']

 

 

 

 

참조

Python-docx and ElemetTree: how to find where hyperlinks lie within a paragraph

Read Docx files via python

 

반응형