Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Спарсить через bs4 и requests Гутенбергский проект разработанный в 1970х.

Рома Тютин Знаток (310), открыт 3 дня назад
https://archive.org/ Есть проект и хочу все вытащить. Памяти около 40гб, но кто понимает как. ООП писал, но руками получилось вытащить несколько файлов в txt. Там около 9 ПБ текста и тонны медиа файлов.
1 ответ
Pomogay Мудрец (15998) 3 дня назад
Ниже приведены некоторые соображения и подходы к задаче, учитывая крайне большие объемы данных (речь идет о петабайтах), а также практические ограничения при попытке «спарсить» проект типа Гутенберга с archive.org при помощи стандартных инструментов вроде `requests` и `BeautifulSoup`.



### Ключевые проблемы и ограничения



1. **Объем данных**:

Упомянутые 9 ПБ (петабайт) данных — это астрономический объём. Для контекста, 1 ПБ = 1024 ТБ, а вы упоминаете, что у вас есть порядка 40 ГБ оперативной памяти, что даже не идет в сравнение с объемом. Задача выгрузить и обработать все данные локально на простой машине с помощью `requests` и `BeautifulSoup` практически невыполнима.



2. **Скорость доступа и пропускная способность**:

Загрузка такого массива информации через HTTP-запросы (`requests`) займёт колоссальное время, потребует феноменальной пропускной способности канала и огромного объёма хранилища для сохранения данных.



3. **Структура данных на archive.org**:

Архив Интернет (Internet Archive) предлагает много инструментов для массовой загрузки данных. Часто доступны торрент-файлы или WARC-архивы (Web ARChive), в которых упакованы большие сегменты данных. Парсинг через `BeautifulSoup` предполагает, что вы грузите HTML-страницы и извлекаете из них ссылки или контент. Но для таких масштабов это очень неэффективно.



4. **Правовые и этические аспекты**:

Массовый скрейп данных с archive.org может нарушать условия использования, а также вызывает вопросы по хранению, авторским правам и т.д.



### Возможные пути решения



1. **Использование готовых датасетов и дампов**:

- Проект Гутенберг (Project Gutenberg) предоставляет официальные зеркала и торренты для массового скачивания книг.

- Можно поискать на archive.org уже подготовленные сборки: например, существует сборник `Project Gutenberg CD и DVD Project`, где доступен оффлайн-дамп многих книг.

- Это позволит не «парсить» HTML, а работать с уже структурированными файлами (txt, epub, mobi), которые можно скачать одним большим архивом или по частям.



2. **Использование официального API archive.org**:

Archive.org имеет открытые API, позволяющие:

- Искать метаданные по коллекциям.

- Получать списки файлов для конкретных сборников.



Вместо парсинга HTML-страниц с помощью `BeautifulSoup` используйте API, чтобы получить ссылки на файлы, после чего можно скачивать их напрямую. Это существенно снизит нагрузку и сделает процесс более управляемым.



3. **Массовая загрузка с помощью специальных инструментов**:

- `wget` с параметром `-r` (рекурсивной загрузки), но это в вашем случае малопрактично.

- Используйте `internetarchive` CLI (есть пакет `internetarchive` на Python), который позволяет скачивать метаданные и файлы из archive.org.



Пример использования Python-библиотеки:

```python

import internetarchive



# Поиск по ключевым словам "Project Gutenberg"

search_results = internetarchive.search_items('collection:gutenberg')



for item in search_results:

# item['identifier'] - идентификатор записи

# С помощью этого можно вытащить метаданные и файлы

files = internetarchive.get_files(item['identifier'])

for f in files:

# Тут можно фильтровать типы файлов, скажем, text/plain

if f.format == 'Text':

f.download()

```



Данный подход более легитимен и масштабируем по сравнению с вручную написанным парсером на `requests + BeautifulSoup`.
Похожие вопросы