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
반응형