paint-brush
Давайте створимо безкоштовний інструмент для сканування веб-сторінок, який поєднує в собі проксі та штучний інтелект для аналізу данихза@aviatorscode2
Нова історія

Давайте створимо безкоштовний інструмент для сканування веб-сторінок, який поєднує в собі проксі та штучний інтелект для аналізу даних

за Victor Yakubu15m2024/12/17
Read on Terminal Reader

Надто довго; Читати

Дізнайтеся, як поєднувати веб-збирання, проксі та мовні моделі на основі штучного інтелекту, щоб автоматизувати вилучення даних і легко отримати корисну інформацію.
featured image - Давайте створимо безкоштовний інструмент для сканування веб-сторінок, який поєднує в собі проксі та штучний інтелект для аналізу даних
Victor Yakubu HackerNoon profile picture
0-item
1-item
2-item

У той час як деякі веб-сайти легко отримати, використовуючи лише Selenium, Puppeteer тощо, інші веб-сайти, які впроваджують розширені заходи безпеки, такі як CAPTCHA та IP-заборони, можуть виявитися складними. Щоб подолати ці труднощі та гарантувати, що ви можете безкоштовно очищати 99% веб-сайтів за допомогою Scraper, ви створите його в цій статті та інтегруєте інструмент проксі у вашому коді, який допоможе обійти ці заходи безпеки.


Однак збір даних — це лише один крок; те, що ви робите з цими даними, однаково, якщо не більше, важливо. Часто це вимагає ретельного просіювання великих обсягів інформації вручну. Але що, якби ви могли автоматизувати цей процес? Використовуючи мовну модель (LLM), ви можете не тільки збирати дані, але й надсилати запити для отримання значущої інформації, заощаджуючи час і зусилля.


У цьому посібнику ви дізнаєтеся, як поєднати веб-збирання з штучним інтелектом, щоб створити потужний інструмент для безкоштовного збору та аналізу даних у масштабі. Давайте зануримося!

передумови

Перш ніж почати, переконайтеся, що у вас є:

  1. Базові знання Python, оскільки цей проект передбачає написання та розуміння коду Python.
  2. Установіть Python (3.7 або новішої версії) у вашій системі. Ви можете завантажити його з python.org .

Встановлення та налаштування

Щоб продовжити цей підручник, виконайте такі кроки:

Виконайте ці кроки, щоб налаштувати середовище та підготуватися до створення скребка на основі ШІ.

1. Створіть віртуальне середовище

Спочатку налаштуйте віртуальне середовище для керування залежностями вашого проекту. Це забезпечить ізольований простір для всіх необхідних пакетів.


  1. Створіть новий каталог проекту:

    Відкрийте термінал (або командний рядок/PowerShell у Windows) і створіть новий каталог для свого проекту:

     mkdir ai-website-scraper cd ai-website-scraper


  2. Створіть віртуальне середовище:

Виконайте таку команду, щоб створити віртуальне середовище:


  • У Windows:

     python -m venv venv
  • У macOS/Linux:

     python3 -m venv venv


Це створює папку venv , у якій зберігатиметься віртуальне середовище.


2. Активуйте віртуальне середовище

Щоб почати роботу в ньому, активуйте віртуальне середовище:


  • У Windows:

     .\venv\Scripts\activate
  • У macOS/Linux:

     source venv/bin/activate


Підказка терміналу зміниться на ( venv ), підтверджуючи, що ви перебуваєте у віртуальному середовищі.

3. Встановіть необхідні залежності

Тепер встановіть бібліотеки, які потрібні вашому проекту. Створіть файл requirements.txt у каталозі проекту та додайте такі залежності:


 streamlit selenium Beautifulsoup4 langchain langchain-ollama lxml html5lib


Ці пакети необхідні для копіювання, обробки даних і створення інтерфейсу користувача:

  • streamlit : використовується для створення інтерактивного інтерфейсу користувача.

  • Selenium : для збирання вмісту веб-сайту.

  • beautifulsoup4 : для аналізу та очищення HTML.

  • langchain і langchain-ollama : це для інтеграції з Ollama LLM і обробки тексту.

  • lxml і html5lib : для розширеного аналізу HTML.


Встановіть залежності, виконавши таку команду:

(Переконайтеся, що ви перебуваєте в папці, де знаходиться файл, перед виконанням команди.)


 pip install -r requirements.txt


Створення інтерфейсу користувача за допомогою Streamlit

Streamlit полегшує створення інтерактивного інтерфейсу користувача (UI) для програм Python. У цьому розділі ви створите простий, зручний інтерфейс, де користувачі зможуть вводити URL-адресу та відображати зібрані дані.

1. Налаштуйте сценарій Streamlit

Створіть файл з назвою ui.py у каталозі проекту. Цей сценарій визначить інтерфейс користувача для вашого скребка. Використовуйте код нижче, щоб структурувати свою програму:

 import streamlit as st import pathlib from main import scrape_website # function to load css from the assets folder def load_css(file_path): with open(file_path) as f: st.html(f"<style>{f.read()}</style>") # Load the external CSS css_path = pathlib.Path("assets/style.css") if css_path.exists(): load_css(css_path) st.title("AI Scraper") st.markdown( "Enter a website URL to scrape, clean the text content, and display the result in smaller chunks." ) url = st.text_input(label= "", placeholder="Enter the URL of the website you want to scrape") if st.button("Scrape", key="scrape_button"): st.write("scraping the website...") result = scrape_website(url) st.write("Scraping complete.") st.write(result)


  • Функції st.title і st.markdown встановлюють назву програми та надають інструкції для користувачів.
  • Компонент st.text_input дозволяє користувачам вводити URL-адресу веб-сайту, який вони хочуть отримати.
  • Натискання кнопки «Scrape» запускає логіку збирання, відображаючи повідомлення про перебіг за допомогою st.info .


Ви можете дізнатися більше про компоненти streamlit у них документація .

2. Додайте власні стилі

Щоб створити стиль програми, створіть папку з активами в каталозі проекту та додайте файл style.css. Налаштуйте інтерфейс Streamlit за допомогою CSS:

 .stAppViewContainer { background-image: url("https://images.unsplash.com/photo-1732979887702-40baea1c1ff6?q=80&w=2832&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"); background-size: cover; color: black; } .stAppHeader { background-color: rgba(0, 0, 0, 0); } .st-ae { background-color: rgba(233, 235, 234, 0.895); } .st-emotion-cache-ysk9xe { color: black; } .st.info, .stAlert { background-color: black; } .st-key-scrape_button button { display: inline-block; padding: 10px 20px; font-size: 16px; color: #fff; background-color: #007bff; border: none; border-radius: 5px; cursor: pointer; animation: pulse 2s infinite; } .st-key-scrape_button button:hover { background-color: #0056b3; color: #fff; }


3. Запустіть програму Streamlit

У каталозі проекту виконайте таку команду:

 streamlit run ui.py


Це запустить локальний сервер, і ви побачите URL-адресу в терміналі, зазвичай http://localhost:8501 . Відкрийте цю URL-адресу у своєму браузері, щоб взаємодіяти з веб-програмою.

Додаток AI Scraper

Скопінг веб-сайту за допомогою Selenium

Далі напишіть код для вилучення вмісту HTML будь-якої веб-сторінки за допомогою Selenium. Однак, щоб код працював, вам потрібен Chrome WebDriver.

Установіть ChromeDriver для Selenium

Selenium потребує WebDriver для взаємодії з веб-сторінками. Ось як це налаштувати:

  1. Завантажте ChromeDriver:
    Відвідайте це Веб-сайт ChromeDriver і завантажте версію, яка відповідає вашому браузеру Google Chrome.
  2. Додайте ChromeDriver до PATH


Після завантаження ChromeDriver розпакуйте файл і скопіюйте назву файлу програми « chromedriver » і вставте його в папку проекту.

Коли це буде зроблено, створіть новий файл під назвою main.py і застосуйте наведений нижче код:

 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # Function to scrape HTML from a website def scrape_website(website_url): # Path to WebDriver webdriver_path = "./chromedriver" # Replace with your WebDriver path service = Service(webdriver_path) driver = webdriver.Chrome(service=service) try: # Open the website driver.get(website_url) # Wait for the page to fully load WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, "body"))) # Extract the HTML source html_content = driver.page_source return html_content finally: # Ensure the browser is closed after scraping driver.quit()


Збережіть і запустіть код; ви повинні отримати весь HTML-код сторінки, яку ви скопіювали, у вашій програмі streamlit таким чином:

Використання проксі-провайдера для обходу веб-сайту за допомогою Captcha та IP-заборон

Хоча тепер ви можете отримати HTML-код веб-сайту, наведений вище код може не працювати для сайтів із вдосконаленими механізмами захисту від копіювання, такими як виклики CAPTCHA або заборони IP-адрес. Наприклад, сканування такого сайту, як Indeed або Amazon за допомогою Selenium, може призвести до блокування доступу до сторінки CAPTCHA. Це відбувається тому, що веб-сайт виявляє, що бот намагається отримати доступ до його вмісту. Якщо така поведінка не зникне, сайт може зрештою забанити вашу IP-адресу, перешкоджаючи подальшому доступу.


Captcha


Щоб виправити це, інтегруйте Браузер сканування Bright Data у ваш сценарій. Браузер сканування — це надійний інструмент, який використовує кілька проксі-мереж, у тому числі локальні IP-адреси, щоб обійти захист від сканування. Він керує розблокуванням сторінок, керуючи користувацькими заголовками, відбитками пальців браузера, перевіркою CAPTCHA тощо. Це гарантує, що ваші спроби сканування залишаться непоміченими при безперешкодному доступі до вмісту.

Налаштування Scraping Browser Bright Data безкоштовно

  1. Реєстрація — перейти Домашня сторінка Bright Data і натисніть « Почати безкоштовну пробну версію ». Якщо у вас уже є обліковий запис у Bright Data, ви можете просто увійти.

  2. Після входу натисніть « Отримати проксі-продукти ».


  3. Натисніть кнопку « Додати » та виберіть « Браузер копіювання ».


  4. Далі ви потрапите на сторінку « Додати зону », де вам потрібно буде вибрати назву для вашої нової проксі-зони браузера. Після цього натисніть « Додати ».


  5. Після цього ваші облікові дані проксі-зони будуть створені. Вам знадобляться ці деталі у вашому сценарії, щоб обійти будь-які механізми запобігання зчитування, які використовуються на будь-якому веб-сайті.


Ви також можете ознайомитися з документацією для розробників Bright Data, щоб отримати докладніші відомості про браузер копіювання.


У вашому файлі main.py змініть код на цей. Ви помітите, що цей код чистіший і коротший за попередній.


 from selenium.webdriver import Remote, ChromeOptions from selenium.webdriver.chromium.remote_connection import ChromiumRemoteConnection from selenium.webdriver.common.by import By from bs4 import BeautifulSoup AUTH = '<username>:<passord>' SBR_WEBDRIVER = f'https://{AUTH}@brd.superproxy.io:9515' # Function to scrape HTML from a website def scrape_website(website_url): print("Connecting to Scraping Browser...") sbr_connection = ChromiumRemoteConnection(SBR_WEBDRIVER, "goog", "chrome") with Remote(sbr_connection, options=ChromeOptions()) as driver: driver.get(website_url) print("Waiting captcha to solve...") solve_res = driver.execute( "executeCdpCommand", { "cmd": "Captcha.waitForSolve", "params": {"detectTimeout": 10000}, }, ) print("Captcha solve status:", solve_res["value"]["status"]) print("Navigated! Scraping page content...") html = driver.page_source return html


Замініть <ім'я користувача> і <пароль> на ім'я користувача та пароль для сканування браузера.

Очищення вмісту Dom

Після сканування HTML-вмісту веб-сайту він часто заповнюється непотрібними елементами, як-от JavaScript, стилі CSS або небажаними тегами, які не впливають на основну інформацію, яку ви витягуєте. Щоб зробити дані більш структурованими та корисними для подальшої обробки, вам потрібно очистити вміст DOM, видаливши нерелевантні елементи та впорядкувавши текст.


У цьому розділі пояснюється, як очистити вміст HTML, витягнути змістовний текст і розділити його на менші фрагменти для подальшої обробки. Процес очищення важливий для підготовки даних для таких завдань, як обробка природної мови або аналіз вмісту.

Покрокове керівництво по коду для очищення вмісту DOM

Ось код, який буде додано до main.py для очищення вмісту DOM:


 from bs4 import BeautifulSoup # Extract the body content from the HTML def extract_body_content(html_content): soup = BeautifulSoup(html_content, "html.parser") body_content = soup.body if body_content: return str(body_content) return "" # Clean the body content by removing scripts, styles, and other unwanted elements def clean_body_content(body_content): soup = BeautifulSoup(body_content, "html.parser") # Remove <script> and <style> tags for script_or_style in soup(["script", "style"]): script_or_style.extract() # Extract cleaned text with each line separated by a newline cleaned_content = soup.get_text(separator="\n") cleaned_content = "\n".join( line.strip() for line in cleaned_content.splitlines() if line.strip() ) return cleaned_content # Split the cleaned content into smaller chunks for processing def split_dom_content(dom_content, max_length=5000): return [ dom_content[i : i + max_length] for i in range(0, len(dom_content), max_length) ]


Що робить Кодекс

  1. Вилучення основного вмісту:
    • Функція extract_body_content використовує BeautifulSoup для аналізу HTML і вилучення вмісту тегу <body> .
    • Якщо існує тег <body> , функція повертає його як рядок. В іншому випадку він повертає порожній рядок.
  2. Очищення вмісту:
    • Функція clean_body_content обробляє видобутий вміст для видалення непотрібних елементів:
      • Теги <script> і <style> видалено, щоб усунути JavaScript і CSS.
      • Функція отримує звичайний текст із очищеного вмісту.
      • Він форматує текст, видаляючи порожні рядки та зайві пробіли.
  3. Поділ вмісту:
    • Функція split_dom_content бере очищений вміст і розділяє його на менші фрагменти з максимальною довжиною за замовчуванням 5000 символів.
    • Це корисно для обробки великих обсягів тексту в керованих частинах, особливо при передачі даних моделям з обмеженнями розміру маркерів або вхідних даних.


Збережіть зміни та протестуйте свою програму. Ви маєте отримати подібний результат після аналізу веб-сайту.

Розбір вмісту Dom до Ollama

Після того, як вміст DOM очищено та підготовлено, наступним кроком буде розбір інформації для отримання конкретних деталей за допомогою Оллама , велика мовна модель (LLM), інтегрована з LangChain. Ollama — це інструмент CLI, який використовується для локального завантаження та запуску LLM. Однак перед використанням Ollama вам потрібно виконати наступні інсталяції:


  • Якщо ви цього не зробили, завантажте та встановіть Ollama з офіційний сайт . Ви можете встановити його на Mac за допомогою команди Homebrew.

     brew install ollama
  • Далі встановіть будь-яку модель від цей список ; є такі моделі, як Phi3, Mistral, Gemma 2 та ін.; кожен має свої системні вимоги. Цей код використовує phi3 головним чином тому, що він легкий.

     ollama pull phi3


Після інсталяції ви можете викликати цю модель зі свого сценарію за допомогою LangChain, щоб надати значущу інформацію на основі даних, які їй надсилатимуться.


Ось як налаштувати функціональність для аналізу вмісту DOM у моделі phi3

Покрокове керівництво по коду для llm.py

Наступний код реалізує логіку аналізу фрагментів DOM за допомогою Ollama та вилучення відповідних деталей:

 from langchain_ollama import OllamaLLM from langchain_core.prompts import ChatPromptTemplate # Template to instruct Ollama for parsing template = ( "You are tasked with extracting specific information from the following text content: {dom_content}. " "Please follow these instructions carefully: \n\n" "1. **Extract Information:** Only extract the information that directly matches the provided description: {parse_description}. " "2. **No Extra Content:** Do not include any additional text, comments, or explanations in your response. " "3. **Empty Response:** If no information matches the description, return an empty string ('')." "4. **Direct Data Only:** Your output should contain only the data that is explicitly requested, with no other text." ) # Initialize the Ollama model model = OllamaLLM(model="phi3") # Function to parse DOM chunks with Ollama def parse_with_ollama(dom_chunks, parse_description): prompt = ChatPromptTemplate.from_template(template) chain = prompt | model parsed_results = [] for i, chunk in enumerate(dom_chunks, start=1): if not chunk.strip(): # Skip empty chunks print(f"Skipping empty chunk at batch {i}") continue try: print(f"Processing chunk {i}: {chunk[:100]}...") # Print a preview print(f"Parse description: {parse_description}") response = chain.invoke( { "dom_content": chunk, "parse_description": parse_description, } ) print(f"Response for batch {i}: {response}") parsed_results.append(response) except Exception as e: print(f"Error parsing chunk {i}: {repr(e)}") parsed_results.append(f"Error: {repr(e)}") return "\n".join(parsed_results)

Що робить код.

  1. Шаблон інструкції:
    • Надає точні вказівки для Оллами щодо того, яку інформацію потрібно отримувати.
    • Гарантує, що вихідні дані є чистими, лаконічними та відповідають опису аналізу.
  2. Обробка фрагментів:
    • Функція parse_with_ollama повторює блоки DOM, обробляючи кожен з LLM.
    • Пропускає порожні фрагменти для оптимізації продуктивності.
  3. Обробка помилок:
    • Витончено обробляє помилки, реєструє їх і продовжує обробку фрагментів, що залишилися.

Оновлення файлу ui.py

Додайте наступний код до файлу ui.py, щоб дозволити користувачам вводити інструкції аналізу в LLM і переглядати результати:

 from main import scrape_website, extract_body_content, clean_body_content, split_dom_content from llm import parse_with_ollama if "dom_content" in st.session_state: parse_description = st.text_area("Enter a description to extract specific insights from your scraped data:") if st.button("Parse Content", key="parse_button"): if parse_description.strip() and st.session_state.get("dom_content"): st.info("Parsing the content...") dom_chunks = split_dom_content(st.session_state.dom_content) parsed_result = parse_with_ollama(dom_chunks, parse_description) st.text_area("Parsed Results", parsed_result, height=300) else: st.error("Please provide valid DOM content and a description to parse.")

Як це працює в інтерфейсі користувача

  1. Введення користувача:
    • Користувач надає опис природною мовою даних для вилучення в текстовій області.
  2. Тригер аналізу:
    • Коли натиснуто кнопку «Аналіз вмісту», очищений вміст DOM розбивається на керовані блоки та передається до parse_with_ollama.
  3. Відображення результатів:
    • Проаналізовані результати відображаються в текстовій області, що дозволяє користувачам переглядати отриману інформацію.


Після цього зберігач тепер може надавати відповіді на ваші підказки на основі зібраних даних.


що далі

Поєднання веб-скрейпінгу та штучного інтелекту відкриває захоплюючі можливості для розуміння на основі даних. Окрім збору та збереження даних, тепер ви можете використовувати штучний інтелект для оптимізації процесу отримання інформації зі зібраних даних. Це корисно для відділів маркетингу та продажів, аналізу даних, власників бізнесу та багато іншого.


Ви можете знайти повний код для AI scraper тут. Не соромтеся експериментувати з ним і адаптувати його до своїх унікальних потреб. Внески також вітаються — якщо у вас є ідеї щодо покращення, розгляньте можливість створення запиту на витяг!


Ви також можете зробити це далі. Ось кілька ідей:

  • Експериментуйте з підказками: адаптуйте свої підказки, щоб отримати конкретну інформацію або відповідати унікальним вимогам проекту.
  • Інтерфейс користувача
  • Інтегруйте інші моделі LLM: досліджуйте інші мовні моделі, як OpenAI , Близнюки тощо для подальшої оптимізації аналізу даних.


L O A D I N G
. . . comments & more!

About Author

Victor Yakubu HackerNoon profile picture
Victor Yakubu@aviatorscode2
Frontend Developer, Technical Writer and Content Creator

ПОВІСИТИ БИРКИ

ЦЯ СТАТТЯ БУЛА ПРЕДСТАВЛЕНА В...