Запросы Python требуют слишком много времени для получения данных в формате .pdf с веб-сайтовPython

Программы на Python
Ответить
Anonymous
 Запросы Python требуют слишком много времени для получения данных в формате .pdf с веб-сайтов

Сообщение Anonymous »

Вот ваш текст с исправленной грамматикой и улучшенной ясностью:
Я пытаюсь создать единый облегченный скрипт Python, чтобы открыть веб-сайт, на котором размещен гарантированный PDF-файл, загрузить его и извлеките его текст.
Я просмотрел множество сообщений здесь и в Интернете и остановился на сочетании запросов и библиотек PyPDF2. Хотя PyPDF2 эффективно извлекает текст после того, как PDF-файл находится в памяти, процесс получения данных PDF-файла с помощью запросов происходит довольно медленно. Ниже приведен мой код и время, необходимое для получения PDF-файла (до извлечения текста).
Это мой исходный код:

Код: Выделить всё

import urllib.request
from urllib.parse import urlparse
import time

url = "https://www.ohchr.org/sites/default/files/UDHR/Documents/UDHR_Translations/eng.pdf"

headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
"Accept": "application/pdf",  # Indicating we want a PDF file
}

# Extract the base domain from the URL to set as the Referer header
parsed_url = urlparse(url)
referer = f"{parsed_url.scheme}://{parsed_url.netloc}"  # Extract base domain (e.g., "https://example.com")

# Update the headers with dynamic Referer
headers["Referer"] = referer

start_time=time.time()
# Step 1: Fetch PDF content directly from the URL with headers
req = urllib.request.Request(url, headers=headers)
with urllib.request.urlopen(req) as response:
pdf_data = response.read()

print(time.time() - start_time)
print(time.time() - start_time)
65.53884482383728

Получение данных со страницы заняло больше минуты, хотя открытие этого URL-адреса в моем браузере происходит со скоростью света.
И другая версия с использованием адаптеров urllib3 и повторной попытки логика:

Код: Выделить всё

import requests
import time
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

url = "https://www.ohchr.org/sites/default/files/UDHR/Documents/UDHR_Translations/eng.pdf"

headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
"Accept": "application/pdf",
"Cache-Control": "no-cache",
"Pragma": "no-cache",
}

start_time = time.time()

# Configure retries for requests
session = requests.Session()
retries = Retry(total=3, backoff_factor=0.3, status_forcelist=[500, 502, 503, 504])
adapter = HTTPAdapter(max_retries=retries)
session.mount("https://", adapter)

response = session.get(url, headers=headers, timeout=5)

if response.status_code == 200:
pdf_data = response.content
print(f"Time taken: {time.time() - start_time:.2f} seconds")
else:
print(f"Failed to fetch the PDF. Status code: {response.status_code}")
Затраченное время: 105,47 секунды

Оба метода подходят для загрузки PDF-файла, но этот процесс по-прежнему слишком медленный для производства. Например, при использовании URL-адреса Организации Объединенных Наций мой браузер загружает PDF-файл за 1–2 секунды, тогда как сценарий занимает гораздо больше времени. Мое подключение к Интернету быстрое и стабильное.
Вопрос:
Какие альтернативные подходы, библиотеки или стратегии программирования я могу использовать, чтобы ускорить этот процесс (сделать его таким же быстрым, как браузер )? Если вы сталкивались с этим раньше, поделитесь своими решениями. Я читал о настройке пользовательских агентов и заголовков, но мне это не помогло.

Подробнее здесь: https://stackoverflow.com/questions/792 ... m-websites
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»