Я работаю над проектом парсинга веб-страниц, целью которого является извлечение чистых, структурированных данных с веб-сайтов для дальнейшего обогащения модели извлечения дополненной генерации (RAG). Хотя я успешно собираю и обрабатываю расшифровки стенограмм YouTube, я сталкиваюсь с проблемами при сборе данных веб-сайтов.
Мой подход:
- Используемые технологии:
- Selenium для динамического рендеринга контента
- BeautifulSoup для анализа и извлечения HTML-контента.
- Regex и NLTK для фильтрации нежелательных шаблонов и шума.
- Шаги, которые я предпринял:
- Удалены элементы HTML, такие как , и другие, которые не являются частью основного контента.
- Используются шаблоны регулярных выражений для фильтрации нерелевантных данных, таких как даты, адреса электронной почты и URL-адреса.
- Используются шаблоны регулярных выражений для фильтрации нерелевантных данных, таких как даты, адреса электронной почты и URL-адреса.
- li>
Применены стоп-слова NLTK для большей очистки текста.
- < strong>Фрагменты кода:
Вот образец из моего парсера BeautifulSoup:Я также использую Selenium для динамического сбора результатов поиска:Код: Выделить всё
from bs4 import BeautifulSoup import requests import re from nltk.corpus import stopwords stop_words = set(stopwords.words('english')) class BeautifulSoupScraper: @staticmethod def extract_text_from_url(url): response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') # Remove unwanted elements for unwanted in soup(['script', 'style', 'header', 'footer', 'nav', 'aside', 'form']): unwanted.decompose() paragraphs = soup.find_all('p') text = "\n".join([para.get_text() for para in paragraphs]) return text @staticmethod def filter_text(text): # Removing unwanted patterns (e.g., URLs, dates, etc.) unwanted_patterns = [r'http[s]?://\S+', r'\b\d{1,2}[/-]\d{1,2}[/-]\d{2,4}\b'] for pattern in unwanted_patterns: text = re.sub(pattern, '', text) return ' '.join([word for word in text.split() if word.lower() not in stop_words])Код: Выделить всё
from selenium import webdriver from selenium.webdriver.common.by import By class GoogleSearch: @staticmethod def search(keyword, num_results=5): driver = webdriver.Chrome() driver.get(f"https://www.google.com/search?q={keyword}") elements = driver.find_elements(By.CLASS_NAME, "MjjYud")[:num_results] links = [element.find_element(By.TAG_NAME, 'a').get_attribute('href') for element in elements] driver.quit() return links
Несмотря на использование BeautifulSoup и регулярных выражений для фильтрации нежелательных данных , я по-прежнему слышу много шума в извлеченном контенте, особенно в разделах комментариев, рекламных объявлениях и других нерелевантных частях веб-страницы. Моя цель — аккуратно извлечь значимый текст (например, содержимое блога, текст статьи) без этого шума.
Что я пробовал:
- Использование регулярных выражений для удаления распространенных шаблонов, таких как даты, URL-адреса и адреса электронной почты.
- Удаление стоп-слов с помощью NLTK.
- Фильтрация по ключевым словам (например, «подписаться», «комментарии»), но все равно остаются нежелательные разделы веб-страницы.
Что мне нужно:
- Рекомендации и рекомендации по улучшению процесса фильтрации, особенно по удалению нерелевантных разделов веб-страниц.
- Рекомендации по дополнительным вопросам эффективные способы очистки очищенных данных, помимо регулярного выражения и базовой фильтрации стоп-слов.
- Любые советы по тому, как сделать процесс извлечения более точным и бесшумным при работе с различными типами структур веб-сайтов.
li>
Подробнее здесь: https://stackoverflow.com/questions/790 ... m-websites