Как заставить AI просматривать сайты?

Добрый день, читатели, сегодня я расскажу, как заставить любой текстовый AI просматривать сайты, которые вы пришлёте.

Получение содержимого сайта

Нашей первой задачей будет, получение HTML-содержимого с сайта, который мы хотим просмотреть, для этого необходимо отправить HTTP-запрос на указанный вами URL и декодировать его.

async def fetch_html_content(url): headers = { 'User-Agent': generate_random_user_agent() } try: async with aiohttp.ClientSession(headers=headers) as session: async with session.get(url) as response: if response.status == 200: content = await response.read() encoding = chardet.detect(content)['encoding'] if not encoding: encoding = 'utf-8' return content.decode(encoding, errors='ignore') return None except aiohttp.ClientError as e: return None

Извлечение текста из HTML

Теперь, когда у нас есть HTML-содержимое страницы, нам необходимо извлечь из него чистый текст. Я использовал библиотеку BeautifulSoup, но вы можете воспользоваться и другими инструментами

async def extract_text_from_html(html_content): try: soup = BeautifulSoup(html_content, 'html.parser') for script in soup(["script", "style", "header", "footer", "nav", "aside"]): script.decompose() text = soup.get_text(separator=' ', strip=True) text = re.sub(r'\s+', ' ', text) return text.strip() except Exception as e: return ''

Эта функция удаляет все ненужные теги, такие как <script>, <style>, <header> и т.д., и возвращает чистый текст.

Разделяем текст на части

Для удобства обработки и анализа текста, его необходимо разделить на более мелкие части, в моём случае я разбиваю текст, который не превышает длину 4096 символов

def split_text(text, max_length=4096): parts = [] while len(text) > max_length: split_pos = text[:max_length].rfind(' ') if split_pos == -1: split_pos = max_length parts.append(text[:split_pos]) text = text[split_pos:].strip() parts.append(text) return parts

Объединяем всё

Теперь мы можем объединить все шаги в одном процессе, который будет извлекать URL, получать HTML-содержимое, извлекать текст и разделять его на части.

urls = ['https://example.com'] if urls: combined_content = '' for url in urls: html_content = await fetch_html_content(url) if html_content: extracted_text = await extract_text_from_html(html_content) text_parts = split_text(extracted_text) for i, part in enumerate(text_parts): combined_content += f"\n\nСодержимое по ссылке ({url}) - часть {i+1}:\n{part}"

После всех действий в переменной combined_content будет храниться обработанный текст, который далее можно скормить AI

Заключение

В данной статье я показал минимальную систему, которая позволяет скармливать AI любые сайты и задавать вопросы по их содержимому

Мой Telegram-бот с нейросетями - *перейти*

11
Начать дискуссию