Запрос 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 секунды, тогда как сценарий занимает гораздо больше времени. Мое подключение к Интернету быстрое и стабильное.
Какие альтернативные подходы, библиотеки или стратегии программирования я могу использовать, чтобы ускорить этот процесс (сделав его таким же быстрым, как браузер)? Я читал о настройке пользовательских агентов и заголовков, но мне это не помогло.
Обновить
Я просто запускаю код на Colab, и это так быстро:
Изображение
< /p>
Что может быть ошибся или отсутствует в моей конфигурации? У меня Windows 10, хорошее подключение к Интернету.

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

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

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

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

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

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