Я просмотрел множество сообщений здесь и в Интернете и остановился на сочетании запросов и библиотек 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)
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}")
Оба метода подходят для загрузки PDF-файла, но процесс все еще слишком медленный для производства. Например, при использовании URL-адреса Организации Объединенных Наций мой браузер загружает PDF-файл за 1–2 секунды, тогда как сценарий занимает гораздо больше времени. Мое подключение к Интернету быстрое и стабильное.
Какие альтернативные подходы, библиотеки или стратегии программирования я могу использовать, чтобы ускорить этот процесс (сделав его таким же быстрым, как браузер)? Я читал о настройке пользовательских агентов и заголовков, но мне это не помогло.
Обновить
Я просто запускаю код на Colab, и это так быстро:

< /p>
Что может быть ошибся или отсутствует в моей конфигурации? У меня Windows 10, хорошее подключение к Интернету.
Подробнее здесь: https://stackoverflow.com/questions/792 ... om-website
Мобильная версия