Не читается word-файл в коде python
Почему не читается и не выводится на print содержание word-файла в коде python:
import bs4
import time
import random
import requests
import docx
from bs4 import BeautifulSoup
from requests_html import HTMLSession
import magic
import chardet
import codecs
from io import BytesIO
from docx import Document
from selenium import webdriver # pip install selenium
# Список пользовательских агентов
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 11.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.4 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36'
]
# Функция для получения случайного пользовательского агента
def get_random_user_agent():
return random.choice(user_agents)
# Настройка браузера
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument(f"user-agent={get_random_user_agent()}")
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option("useAutomationExtension", False)
data = []
# Использование webdriver
session = HTMLSession()
response = session.get(
"https://mos-gorsud.ru/mgs/search?caseDateFrom=16.02.2023&caseDateTo=28.02.2023&courtAlias=mgs&documentStatus=2&processType=6&formType=fullForm&page=2")
time.sleep(3) # Дополнительная задержка на случай, если нужно, но избегайте чрезмерного использования sleep
soup = BeautifulSoup(response.text, 'html.parser')
heads = soup.find('table', class_='custom_table').find_all('tr')
print(len(heads))
for head in heads[1:]:
link = 'https://mos-gorsud.ru' + head.find('nobr').find('a')['href']
print(link)
loom = session.get(link)
abble = BeautifulSoup(loom.text, 'html.parser')
documents = abble.find('table', {'class': 'custom_table mainTable'}).find('tbody').find_all('tr')
for document in documents:
if "Приговор" in document.text:
score = document.find_all('td')
print(len(score))
for soc in score:
stock = soc.find_all('a')
for sto in stock:
print('Prigovor: ' + 'https://mos-gorsud.ru' + sto['href'])
link_doc = 'https://mos-gorsud.ru' + sto['href']
response = requests.get(link_doc, get_random_user_agent())
# Проверка успешности запроса
if response.status_code == 200:
# Сохранение файла на диск
with open('prigovor.docx', 'wb') as file:
file.write(response.content)
# Открытие Word-документа и извлечение текста
document = Document('prigovor.docx')
text = '\n'.join([paragraph.text for paragraph in document.paragraphs])
resheniye = ' '.join(text.split())
# Вывод ссылки и текста
print('Ссылка на файл: https://mos-gorsud.ru' + sto['href'])
print(resheniye)
else:
print(f"Error downloading file: {response.status_code}")
elif "Постановление суда апелляционной инстанции" in document.text:
score = document.find_all('td')
print(len(score))
for soc in score:
stock = soc.find_all('a')
for sto in stock:
print('Postanovleniye : ' + 'https://mos-gorsud.ru' + sto['href'])
link_pod = 'https://mos-gorsud.ru' + sto['href']
response = requests.get(link_pod, get_random_user_agent())
# Проверка успешности запроса
if response.status_code == 200:
# Сохранение файла на диск
with open('resheniye.docx', 'wb') as file:
file.write(response.content)
# Открытие Word-документа и извлечение текста
document = Document('resheniye.docx')
text = '\n'.join([paragraph.text for paragraph in document.paragraphs])
postanov = ' '.join(text.split())
# Вывод ссылки и текста
print('Ссылка на файл: https://mos-gorsud.ru' + sto['href'])
print(postanov)
else:
print(f"Error downloading file: {response.status_code}")
print('\n')
Пишет это:
Traceback (most recent call last):
File "C:\Users\user\PycharmProjects\cases_pars\little.py", line 143, in <module>
document = Document('resheniye.docx')
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\PycharmProjects\cases_pars\.venv\Lib\site-packages\docx\api.py", line 27, in Document
document_part = cast("DocumentPart", Package.open(docx).main_document_part)
^^^^^^^^^^^^^^^^^^
File "C:\Users\user\PycharmProjects\cases_pars\.venv\Lib\site-packages\docx\opc\package.py", line 127, in open
pkg_reader = PackageReader.from_file(pkg_file)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\PycharmProjects\cases_pars\.venv\Lib\site-packages\docx\opc\pkgreader.py", line 22, in from_file
phys_reader = PhysPkgReader(pkg_file)
^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\PycharmProjects\cases_pars\.venv\Lib\site-packages\docx\opc\phys_pkg.py", line 21, in __new__
raise PackageNotFoundError("Package not found at '%s'" % pkg_file)
docx.opc.exceptions.PackageNotFoundError: Package not found at 'resheniye.docx'
Ответы (2 шт):
По всей видимости, ошибка возникает из-за того, что
document = Document('resheniye.docx')
не может прочитать файл. Это может быть связано с тем, что файл не удалось корректно скачать и/или сохранить.
Для решения проблемы можно попробовать следующее:
Использовать корректное задание заголовков в запросе. Вместо передачи пользовательского агента как позиционного аргумента, следует передавать его через параметр
headers. Например, заменитеrequests.get(link_pod, get_random_user_agent())на
requests.get(link_doc, headers={"User-Agent": get_random_user_agent()})Передавать файл из памяти напрямую в
Document, можно попробовать:import requests from io import BytesIO from docx import Document link_doc = "https://calibre-ebook.com/downloads/demos/demo.docx" response = requests.get(link_doc) # , headers={"User-Agent": get_random_user_agent()} if response.status_code == 200: document = Document(BytesIO(response.content)) for para in document.paragraphs: print(para.text)Добавить блок try-except для трассировки ошибок. Это позволит отлавливать исключения и получать более подробную информацию о проблеме:
try: document = Document('resheniye.docx') except Exception as e: print(f"Ошибка при открытии файла: {e}")
PS: Кроме того, рекомендую изменить структуру кода для избежания дублирования. Например, можно переместить проверку условий if "Приговор" in document.text и elif "Постановление суда апелляционной инстанции" in document.text внутрь цикла for soc in score:, чтобы избежать повторения кода.
РЕШЕНИЕ:
import bs4
import time
import random
import requests
import docx
from requests_html import HTMLSession
from win32com.client import Dispatch
import codecs
from io import BytesIO
from docx import Document
from selenium import webdriver # pip install selenium
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager # pip install webdriver-manager
# Список пользовательских агентов
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 11.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.4 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36'
]
# Функция для получения случайного пользовательского агента
def get_random_user_agent():
return random.choice(user_agents)
# Настройка браузера
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument(f"user-agent={get_random_user_agent()}")
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option("useAutomationExtension", False)
data = []
# Использование webdriver
with webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options) as driver:
driver.maximize_window()
driver.get(
"https://mos-gorsud.ru/mgs/search?caseDateFrom=16.02.2023&caseDateTo=28.02.2023&courtAlias=mgs&documentStatus=2&processType=6&formType=fullForm&page=2")
time.sleep(3) # Дополнительная задержка на случай, если нужно, но избегайте чрезмерного использования sleep
soup = bs4.BeautifulSoup(driver.page_source, 'html.parser')
heads = soup.find('table', class_='custom_table').find_all('tr')
print(len(heads))
for head in heads[1:]:
link = 'https://mos-gorsud.ru' + head.find('nobr').find('a')['href']
# print(link)
driver.get(link)
time.sleep(3) # Дополнительная задержка на случай, если нужно, но избегайте чрезмерного использования sleep
soup = bs4.BeautifulSoup(driver.page_source, 'html.parser')
documents = soup.find('table', {'class': 'custom_table mainTable'}).find('tbody').find_all('tr')
for document in documents:
if "Приговор" in document.text:
score = document.find_all('td')
print(len(score))
for soc in score:
stock = soc.find_all('a')
for sto in stock:
# print('Prigovor : ' + 'https://mos-gorsud.ru' + sto['href'])
link_doc = 'https://mos-gorsud.ru' + sto['href']
session = HTMLSession()
response = session.get(
link_doc)
with open("prigovor.doc", "wb") as file:
file.write(response.content)
def convert_prigovor_to_docx(input_file, output_file):
"""
Конвертирует файл .doc в .docx формат.
Аргументы:
input_file -- путь к входному файлу .doc
output_file -- путь к выходному файлу .docx
"""
word = Dispatch("Word.Application")
word.Visible = False
try:
doc = word.Documents.Open(input_file)
doc.SaveAs2(output_file, FileFormat=16) # 16 - формат .docx
doc.Close()
except Exception as e:
print(f"Ошибка при конвертации файла: {e}")
finally:
word.Quit()
# Пример использования
input_file = r"C:\Users\user\PycharmProjects\cases_pars\\prigovor.doc"
output_file = r"C:\Users\user\PycharmProjects\cases_pars\\prigovor.docx"
convert_prigovor_to_docx(input_file, output_file)
# Открытие Word-документа и извлечение текста
document = Document("C:\\Users\\user\PycharmProjects\cases_pars\\prigovor.docx")
text = '\n'.join([paragraph.text for paragraph in document.paragraphs])
prigovor = ' '.join(text.split())
# Вывод ссылки и текста
print('Ссылка на файл: https://mos-gorsud.ru' + sto['href'])
print(prigovor)
else:
print(f"Error downloading file: {response.status_code}")
elif "Постановление суда апелляционной инстанции" in document.text:
score = document.find_all('td')
print(len(score))
for soc in score:
stock = soc.find_all('a')
for sto in stock:
# print('Postanovleniye : ' + 'https://mos-gorsud.ru' + sto['href'])
link_pod = 'https://mos-gorsud.ru' + sto['href']
session = HTMLSession()
response = session.get(
link_pod)
with open("resheniye.doc", "wb") as file:
file.write(response.content)
def convert_doc_to_docx(input_file, output_file):
"""
Конвертирует файл .doc в .docx формат.
Аргументы:
input_file -- путь к входному файлу .doc
output_file -- путь к выходному файлу .docx
"""
word = Dispatch("Word.Application")
word.Visible = False
try:
doc = word.Documents.Open(input_file)
doc.SaveAs2(output_file, FileFormat=16) # 16 - формат .docx
doc.Close()
except Exception as e:
print(f"Ошибка при конвертации файла: {e}")
finally:
word.Quit()
# Пример использования
input_file = r"C:\Users\user\PycharmProjects\cases_pars\\resheniye.doc"
output_file = r"C:\Users\user\PycharmProjects\cases_pars\\resheniye.docx"
convert_doc_to_docx(input_file, output_file)
# Открытие Word-документа и извлечение текста
document = Document("C:\\Users\\user\PycharmProjects\cases_pars\\resheniye.docx")
text = '\n'.join([paragraph.text for paragraph in document.paragraphs])
resheniye = ' '.join(text.split())
# Вывод ссылки и текста
print('Ссылка на файл: https://mos-gorsud.ru' + sto['href'])
print(resheniye)
else:
print(f"Error downloading file: {response.status_code}")
print('\n')