Проблема с загрузкой PDF, который я не могу открыть

Я работаю над скриптом для извлечения текста из судебных дел, используя https://case.law/docs/site_features/api. Я создал методы для поиска и создания-xlsx, которые работают хорошо, но я борюсь с методом, чтобы открыть онлайн-ссылку в формате PDF, записать (wb) во временный файл, прочитать и извлечь данные (основной текст), а затем закрыть Это. Конечная цель — использовать содержание этих кейсов для НЛП.

Я подготовил функцию (см. ниже) для загрузки файла:

def download_file(file_id):
    http = urllib3.PoolManager()
    folder_path = "path_to_my_desktop"
    file_download = "https://cite.case.law/xxxxxx.pdf"
    file_content = http.request('GET', file_download)
    file_local = open( folder_path + file_id + '.pdf', 'wb' )
    file_local.write(file_content.read())
    file_content.close()
    file_local.close()

Сценарий работает хорошо, поскольку он загружает файл и создает его на моем рабочем столе, но когда я пытаюсь вручную открыть файл на рабочем столе, у меня появляется это сообщение от Acrobat Reader:

Adobe Acrobat Reader не удалось открыть «file_id.pdf», потому что это либо неподдерживаемый тип файла, либо файл был поврежден (например, он был отправлен как вложение электронной почты и не был правильно декодирован).

Я думал, что это библиотека, поэтому я попытался использовать Requests / xlswriter / urllib3... (пример ниже — я также попытался прочитать его из сценария, чтобы увидеть, было ли это Adobe, это была проблема, но, видимо, нет)

# Download the pdf from the search results
URL = "https://cite.case.law/xxxxxx.pdf"
r = requests.get(URL, stream=True)
with open('path_to_desktop + pdf_name + .pdf', 'w') as f:
      f.write(r.text)

# open the downloaded file and remove '<[^<]+?>' for easier reading
with open('C:/Users/amallet/Desktop/r.pdf', 'r') as ff:
      data_read = ff.read()
      stripped = re.sub('<[^<]+?>', '', data_read)
      print(stripped)

вывод:

document.getElementById('next').value = document.location.toString();
document.getElementById('not-a-bot-form').submit();

с 'wb' и 'rb' вместо этого (и удалением *** раздетого *** sript:

r = requests.get(test_case_pdf, stream=True)
with open('C:/Users/amallet/Desktop/r.pdf', 'wb') as f:
      f.write(r.content)

with open('C:/Users/amallet/Desktop/r.pdf', 'rb') as ff:
      data_read = ff.read()
      print(data_read)

и вывод:

<html>
<head>
<noscript>
<meta http-equiv="Refresh" content="0;URL=?no_js=1&next=/pdf/7840543/In%20re%20the%20Extradition%20of%20Garcia,%20890%20F.%20Supp.%20914%
20(1994).pdf" />
</noscript>
</head>
<body>
<form method="post" id="not-a-bot-form">
<input type="hidden" name="csrfmiddlewaretoken" value="5awGW0F4A1b7Y6bx
rYBaA6GIvqx4Tf6DnK0qEMLVoJBLoA3ZqOrpMZdUXDQ7ehOz">
<input type="hidden" name="not_a_bot" value="yes">
<input type="hidden" name="next" value="/pdf/7840543/In%20re%20
the%20Extradition%20of%20Garcia,%20890%20F.%20Supp.%20914%20(1994).pdf" id="next">
</form>
<script>
document.getElementById(\'next\').value = document.loc
ation.toString();
document.getElementById(\'not-a-bot-form\').submit();
</script>
<a href="?no_js=1&next=/pdf/7840543/In%20re%20the%20Extradition%20of%20Garcia,%2
0890%20F.%20Supp.%20914%20(1994).pdf">Click here to continue</a>
</body>
</html>

но ни один не работает. PDF-файл не защищен паролем, и я пробовал на другом сайте, и он тоже не работает.

Поэтому мне интересно, есть ли у меня другая проблема, которая не связана с самим кодом.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

благодарю вас


person Arno    schedule 19.11.2020    source источник


Ответы (1)


Похоже, что вместо PDF веб-сервер предоставляет вам веб-страницу, предназначенную для предотвращения загрузки данных с сайта ботами.

В вашем коде все в порядке, но если вы все еще хотите это сделать, вам придется обойти защиту веб-сайта от ботов.

person Alan Ainsworth    schedule 19.11.2020