Веб -скребок сделал для ИИ и простоты. Он работает как CLI, который может быть параллелизирован и выводит высококачественное содержание разметки.
Поделился:
Скребок:
Индексер:
# Install the package
python3 -m pip install scrape-it-now
# Run the CLI
scrape-it-now --help Чтобы настроить CLI (включая аутентификацию в сервисные службы), используйте переменные среды, параметры файла .env или командной строки.
Приложение должно работать с Python 3.13 или более поздней версии. Если эта версия не установлена, это простой способ установить ее Pyenv.
# Download the source code
git clone https://github.com/clemlesne/scrape-it-now.git
# Move to the directory
cd scrape-it-now
# Run install scripts
make install dev
# Run the CLI
scrape-it-now --helpИспользование с хранением Blob Blob -Blob и хранением очередей за лазурными изделиями:
# Azure Storage configuration
export AZURE_STORAGE_ACCESS_KEY=xxx
export AZURE_STORAGE_ACCOUNT_NAME=xxx
# Run the job
scrape-it-now scrape run https://nytimes.comИспользование с локальной дисковой каплей и местной очередью диска:
# Local disk configuration
export BLOB_PROVIDER=local_disk
export QUEUE_PROVIDER=local_disk
# Run the job
scrape-it-now scrape run https://nytimes.comПример:
❯ scrape-it-now scrape run https://nytimes.com
2024-11-08T13:18:49.169320Z [info ] Start scraping job lydmtyz
2024-11-08T13:18:49.169392Z [info ] Installing dependencies if needed, this may take a few minutes
2024-11-08T13:18:52.542422Z [info ] Queued 1/1 URLs
2024-11-08T13:18:58.509221Z [info ] Start processing https://nytimes.com depth=1 process=scrape-lydmtyz-4 task=63dce50
2024-11-08T13:19:04.173198Z [info ] Loaded 154554 ads and trackers process=scrape-lydmtyz-4
2024-11-08T13:19:16.393045Z [info ] Queued 310/311 URLs depth=1 process=scrape-lydmtyz-4 task=63dce50
2024-11-08T13:19:16.393323Z [info ] Scraped depth=1 process=scrape-lydmtyz-4 task=63dce50
...Наиболее частые варианты:
Options | Описание | Environment variable |
|---|---|---|
--azure-storage-access-key-asak | Ключ доступа к хранилищу Azure | AZURE_STORAGE_ACCESS_KEY |
--azure-storage-account-name-asan | Имя учетной записи Azure Storage | AZURE_STORAGE_ACCOUNT_NAME |
--blob-provider-bp | Поставщик BLOB | BLOB_PROVIDER |
--job-name-jn | Имя работы | JOB_NAME |
--max-depth-md | Максимальная глубина | MAX_DEPTH |
--queue-provider-qp | Поставщик очередей | QUEUE_PROVIDER |
--save-images-si | Сохранить изображения | SAVE_IMAGES |
--save-screenshot-ss | Сохраните скриншот | SAVE_SCREENSHOT |
--whitelist-w | Белый список | WHITELIST |
Для документации по всем доступным параметрам, запустите:
scrape-it-now scrape run --helpИспользование с помощью хранилища Blob -Blob:
# Azure Storage configuration
export AZURE_STORAGE_CONNECTION_STRING=xxx
# Show the job status
scrape-it-now scrape status [job_name]Использование с локальной дисковой каплей:
# Local disk configuration
export BLOB_PROVIDER=local_disk
# Show the job status
scrape-it-now scrape status [job_name]Пример:
❯ scrape-it-now scrape status lydmtyz
{ " created_at " : " 2024-11-08T13:18:52.839060Z " , " last_updated " : " 2024-11-08T13:19:16.528370Z " , " network_used_mb " :2.6666793823242188, " processed " :1, " queued " :311}Наиболее частые варианты:
Options | Описание | Environment variable |
|---|---|---|
--azure-storage-access-key-asak | Ключ доступа к хранилищу Azure | AZURE_STORAGE_ACCESS_KEY |
--azure-storage-account-name-asan | Имя учетной записи Azure Storage | AZURE_STORAGE_ACCOUNT_NAME |
--blob-provider-bp | Поставщик BLOB | BLOB_PROVIDER |
Для документации по всем доступным параметрам, запустите:
scrape-it-now scrape status --helpИспользование с хранением Blob Blob, хранением Queue Queue и поиском Azure AI:
# Azure OpenAI configuration
export AZURE_OPENAI_API_KEY=xxx
export AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME=xxx
export AZURE_OPENAI_EMBEDDING_DIMENSIONS=xxx
export AZURE_OPENAI_EMBEDDING_MODEL_NAME=xxx
export AZURE_OPENAI_ENDPOINT=xxx
# Azure Search configuration
export AZURE_SEARCH_API_KEY=xxx
export AZURE_SEARCH_ENDPOINT=xxx
# Azure Storage configuration
export AZURE_STORAGE_ACCESS_KEY=xxx
export AZURE_STORAGE_ACCOUNT_NAME=xxx
# Run the job
scrape-it-now index run [job_name]Использование с локальной дисковой каплей, местной очередью дисков и поиском Azure AI:
# Azure OpenAI configuration
export AZURE_OPENAI_API_KEY=xxx
export AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME=xxx
export AZURE_OPENAI_EMBEDDING_DIMENSIONS=xxx
export AZURE_OPENAI_EMBEDDING_MODEL_NAME=xxx
export AZURE_OPENAI_ENDPOINT=xxx
# Azure Search configuration
export AZURE_SEARCH_API_KEY=xxx
export AZURE_SEARCH_ENDPOINT=xxx
# Local disk configuration
export BLOB_PROVIDER=local_disk
export QUEUE_PROVIDER=local_disk
# Run the job
scrape-it-now index run [job_name]Пример:
❯ scrape-it-now index run lydmtyz
2024-11-08T13:20:37.129411Z [info ] Start indexing job lydmtyz
2024-11-08T13:20:38.945954Z [info ] Start processing https://nytimes.com process=index-lydmtyz-4 task=63dce50
2024-11-08T13:20:39.162692Z [info ] Chunked into 7 parts process=index-lydmtyz-4 task=63dce50
2024-11-08T13:20:42.407391Z [info ] Indexed 7 chunks process=index-lydmtyz-4 task=63dce50
...Наиболее частые варианты:
Options | Описание | Environment variable |
|---|---|---|
--azure-openai-api-key-aoak | Azure OpenAI API -ключ | AZURE_OPENAI_API_KEY |
--azure-openai-embedding-deployment-name-aoedn | Azure openai внедряет имя развертывания | AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME |
--azure-openai-embedding-dimensions-aoed | Azure Openai -встраивание размеров | AZURE_OPENAI_EMBEDDING_DIMENSIONS |
--azure-openai-embedding-model-name-aoemn | Azure openai встроенное название модели модели | AZURE_OPENAI_EMBEDDING_MODEL_NAME |
--azure-openai-endpoint-aoe | Azure Openai Endpoint | AZURE_OPENAI_ENDPOINT |
--azure-search-api-key-asak | Azure Search API -ключ | AZURE_SEARCH_API_KEY |
--azure-search-endpoint-ase | Поиск Azure Endpoint | AZURE_SEARCH_ENDPOINT |
--azure-storage-access-key-asak | Ключ доступа к хранилищу Azure | AZURE_STORAGE_ACCESS_KEY |
--azure-storage-account-name-asan | Имя учетной записи Azure Storage | AZURE_STORAGE_ACCOUNT_NAME |
--blob-provider-bp | Поставщик BLOB | BLOB_PROVIDER |
--queue-provider-qp | Поставщик очередей | QUEUE_PROVIDER |
Для документации по всем доступным параметрам, запустите:
scrape-it-now index run --help ---
Название: Процесс масштабирования с хранением Azure
---
График LR
CLI ["cli"]
web ["сайт"]
Подграф "Хранение очерков лазурки"
to_chunk ["to Chunk"]
to_scrape ["to scrape"]
конец
Подграф "Hazure Blob Storage"
подграф "контейнер"
работа ["работа"]
Сокращенный
Государство ["государство"]
конец
конец
CLI -(1) потянуть сообщение -> to_scrape
CLI -(2) Получить кеш -> скрасной
CLI -(3) Обзор -> Интернет
CLI -(4) Кэш обновления -> скрасной
CLI -(5) Push State -> состояние
CLI -(6) Добавить сообщение -> to_scrape
CLI -(7) Добавить сообщение -> to_chunk
CLI -(8) Государство обновления -> Иов
---
Название: Процесс Scrape с хранением Azure и поиском Azure AI
---
График LR
Поиск ["Azure AI Search"]
CLI ["cli"]
Enterdings ["azure openai interdings"]
Подграф "Хранение очерков лазурки"
to_chunk ["to Chunk"]
конец
Подграф "Hazure Blob Storage"
подграф "контейнер"
Сокращенный
конец
конец
CLI -(1) Потянуть сообщение -> to_chunk
CLI -(2) Получить кеш -> скрасной
CLI -(3) Chunk -> CLI
CLI -(4) встраивать -> встраиваемые
CLI -(5) Нажмите к поиску -> Поиск
Хранение блоба организовано в папках:
[job_name]-scraping/ # Job name (either defined by the user or generated)
scraped/ # All the data from the pages
[page_id]/ # Assets from a page
screenshot.jpeg # Screenshot (if enabled)
[image_id].[ext] # Image binary (if enabled)
[image_id].json # Image metadata (if enabled)
[page_id].json # Data from a page
state/ # Job states (cache & parallelization)
[page_id] # Page state
job.json # Job state (aggregated stats)Данные страницы рассматриваются как API (не сломается до следующей основной версии) и хранятся в формате JSON:
{
"created_at" : " 2024-09-11T14:06:43.566187Z " ,
"redirect" : " https://www.nytimes.com/interactive/2024/podcasts/serial-season-four-guantanamo.html " ,
"status" : 200 ,
"url" : " https://www.nytimes.com/interactive/2024/podcasts/serial-season-four-guantanamo.html " ,
"content" : " ## Listen to the trailer for Serial Season 4... " ,
"etag" : null ,
"links" : [
" https://podcasts.apple.com/us/podcast/serial/id917918570 " ,
" https://music.amazon.com/podcasts/d1022069-8863-42f3-823e-857fd8a7b616/serial?ref=dm_sh_OVBHkKYvW1poSzCOsBqHFXuLc " ,
...
],
"metas" : {
"description" : " “Serial” returns with a history of Guantánamo told by people who lived through key moments in Guantánamo’s evolution, who know things the rest of us don’t about what it’s like to be caught inside an improvised justice system. " ,
"articleid" : " 100000009373583 " ,
"twitter:site" : " @nytimes " ,
...
},
"network_used_mb" : 1.041460037231445 ,
"raw" : " <head>...</head><body>...</body> " ,
"valid_until" : " 2024-09-11T14:11:37.790570Z "
}Затем индексированные данные хранятся в поиске Azure AI:
| Поле | Тип | Описание |
|---|---|---|
chunck_number | Edm.Int32 | Номер чанка, от 0 до x |
content | Edm.String | Содержание chunck |
created_at | Edm.DateTimeOffset | Исходная дата царапины |
id | Edm.String | Chunck id |
title | Edm.String | Название страницы источника |
url | Edm.String | УРЛ страницы источника |
Вариант белого списка позволяет ограничивать доменом и игнорировать подплесны. Это список регулярных выражений:
domain1,regexp1,regexp2 domain2,regexp3Для примеров:
В белом списке learn.microsoft.com :
learn.microsoft.com В белом списке learn.microsoft.com и go.microsoft.com , но игнорируйте все подплески, кроме /en-us :
learn.microsoft.com, ^ /(?!en-us). * go.microsoft.com Чтобы легко настроить CLI, переменные среды исходной среды из файла .env . Например, для варианта --azure-storage-access-key :
AZURE_STORAGE_ACCESS_KEY=xxx Для аргументов, которые принимают несколько значений, используйте список разделенного пространством. Например, для варианта --whitelist :
WHITELIST=learn . microsoft . com go . microsoft . comКэш -директор зависит от операционной системы:
~/.config/scrape-it-now (unix)~/Library/Application Support/scrape-it-now (macOS)C:Users<user>AppDataRoamingscrape-it-now (windows)Создания браузера автоматически загружаются или обновляются при каждом заезде. Браузер - хром и не настраивается (не стесняйтесь открывать проблему, если вам нужен другой браузер), он весит около 450 МБ. Кэш хранится в каталоге кэша.
Местное хранение дисков используется как для капель, так и для очереди. Это не рекомендуется для производственного использования, так как оно не легко масштабируемо, и не устойчиво к отказу. Это полезно для тестирования и разработки или когда вы не можете использовать Azure Services.
Выполнение:
Прокси не реализованы в приложении. Безопасность сети не может быть достигнута с уровня приложения. Используйте VPN (например, ваш, сторонняя сторона) или прокси-сервис (например, Procies, TOR), чтобы обеспечить анонимность и настроить системный брандмауэр, чтобы ограничить доступ к ней сети приложений.
Поскольку приложение упаковано в PYPI, его можно легко связать с контейнером. При каждом старте приложение будет загружать зависимости (браузер и т. Д.) И кэшюр их. Вы можете предварительно загрузить их, запустив scrape-it-now scrape install .
Хорошая техника для производительности также будет параллелизировать задания по соскобке и индексации, запустив несколько контейнеров каждого из них. Это может быть достигнуто с помощью KEDA, путем настройки смагнику очереди.