Я просмотрел множество сообщений здесь и в Интернете и остановился на сочетании запросов и библиотек 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, и это очень быстро:
[img]https://i.sstatic.net /51BRRXkH.png[/img]
Я буду очень благодарен, если вы, ребята, сможете указать, что может быть не так или не так в моей конфигурации, я использую Windows 10, с отличным подключением к Интернету , когда я подаю в суд на свой браузер, страница загружается очень быстро, но когда я использую Python, это очень медленно
Подробнее здесь: https://stackoverflow.com/questions/792 ... om-website
Мобильная версия