Я пытался выяснить, как получить URL-адреса из файла docx с помощью python, но ничего не нашел, я пробовал python-docx и python-docx2txt, но python-docx, кажется, только извлекает текст, а python-docx2txt может извлекать текст из гиперссылки, но не сами URL-адреса.
Как извлечь URL-адрес в гиперссылках из файла docx с помощью python
Ответы (4)
Я новичок в Python, и мне нужно использовать Python для изменения каждой гиперссылки в документе .docx. Благодаря коду Кирана, который дал мне подсказки, чтобы сделать несколько догадок, проб и ошибок и, наконец, заставить его работать. Вот код, который у меня есть, и я хотел бы поделиться с другими новичками.
# python to change docx URL hyperlinks:
### see: https://stackoverflow.com/questions/40475757/how-to-extract-the-url-in-hyperlinks-from-a-docx-file-using-python
from docx import Document
from docx.opc.constants import RELATIONSHIP_TYPE as RT
print(" This program changes the hyperlinks detected in a word .docx file \n")
docx_file=input(" Pls input docx filename (without .docx): ")
document = Document(docx_file + ".docx")
rels = document.part.rels
for rel in rels:
if rels[rel].reltype == RT.HYPERLINK:
print("\n Origianl link id -", rel, "with detected URL: ", rels[rel]._target)
new_url=input(" Pls input new URL: ")
rels[rel]._target=new_url
out_file=docx_file + "-out.docx"
document.save(out_file)
print("\n File saved to: ", out_file)
Спасибо, Лапью Хо.
Я решил это, используя следующий код для печати содержимого гиперссылки из docx
from docx import Document
from docx.opc.constants import RELATIONSHIP_TYPE as RT
document = Document('test.docx')
rels = document.part.rels
def iter_hyperlink_rels(rels):
for rel in rels:
if rels[rel].reltype == RT.HYPERLINK:
yield rels[rel]._target
print(iter_hyperlink_rels(rels)
def iter_hyperlink_rels(rels):
for rel in rels:
if rels[rel].reltype == RT.HYPERLINK:
yield rels[rel]
Это устранит ошибку.
Я опаздываю на эту вечеринку, но если вам нужно что-то, что извлекает все ссылки из файлов .docx и создает из них электронную таблицу (или возвращает их список), у меня есть скрипт, который может сделать это за вас. Он включает в себя как URL-адрес, так и связанный текст, и вы можете передать ему целую папку, если хотите.
https://github.com/Colin-Fredericks/hx_util/blob/master/hx_util/GetWordLinks.py
Он использует BeautifulSoup и UnicodeCSV, которые вы также можете получить из того же репозитория. Работает на Python3. Инструкция вверху файла. Обрабатывает символы, отличные от ascii. Пока протестировано только на Mac и Ubuntu. Excel не может надежно импортировать CSV-файлы в формате Unicode, в отличие от Google Диска. Предлагайте void() там, где это запрещено.