Парсинг веб-страниц с использованием ChatGPT — полное руководство с примерами

Парсинг веб-страниц с ChatGPT

Парсинг — это процесс автоматического извлечения данных с веб-сайтов с использованием кода. ChatGPT стал мощным инструментом дляпарсинга благодаря своим способностям в области естественного языка. В этой статье представлено исчерпывающее руководство по парсингу с использованием ChatGPT, охватывающее основные концепции, подходы, примеры и фрагменты кода.

Введение

ChatGPT открывает новые возможности для автоматизации парсинга без написания сложного кода. В основе парсинга с ChatGPT лежит следующее:

  1. Инспектирование элементов страницы для выявления данных, которые необходимо извлечь.
  2. Предоставление подробных инструкций для парсинга на естественном языке.
  3. Получение сгенерированного ChatGPT кода для извлечения необходимых данных.
  4. Проверка и экспорт извлеченных данных.

Главное преимущество заключается в возможности создавать парсеры с минимальными знаниями программирования. Однако важно предоставить правильные инструкции, чтобы ChatGPT генерировал точные ответы.

В этой статье рассматриваются различные методики с использованием ChatGPT на примерах парсинга статических и динамических веб-сайтов.

Минимальные требования

Перед тем как приступить, убедитесь в следующем:

  • Доступ к ChatGPT (рекомендуется использовать платный план для неограниченных запросов).
  • Базовые знания HTML и CSS для инспектирования элементов.
  • Установлен Python и библиотеки, такие как Beautiful Soup, Selenium, Pandas.
  • CSV-просмотрщик или Python/Jupyter Notebook для проверки результатов.

Начнем с простого

Для известных веб-сайтов парсинг довольно прост. Возьмем, например, сайт IMDB. Мы просто используем эту команду:

web scrape https://www.imdb.com/chart/moviemeter/ and get all the movie names using python and beautifulsoup

ChatGPT отвечает следующим образом:

import requests
from bs4 import BeautifulSoup

url = "https://www.imdb.com/chart/moviemeter/"

response = requests.get(url)

if response.status_code == 200:
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # Находим все столбцы с заголовками, содержащими названия фильмов
    title_columns = soup.find_all('td', class_='titleColumn')
    
    movies = []
    for title_column in title_columns:
        # Извлекаем названия фильмов из заголовков
        movie_name = title_column.a.get_text(strip=True)
        movies.append(movie_name)
        
    # Вывод списка названий фильмов
    for i, movie in enumerate(movies, start=1):
        print(f"{i}. {movie}")
else:
    print("Не удалось получить веб-страницу. Код состояния:", response.status_code)

Когда вы запускаете этот скрипт, к сожалению, он не работает…

Failed to retrieve the webpage. Status Code: 403

Теперь мы переходим к более сложным задачам. Давайте немного модифицируем скрипт. IMDB требует видеть «подпись» браузера, чтобы ответить на запрос. Поэтому мы добавляем заголовок User-Agent. Вот новый скрипт:

import requests
from bs4 import BeautifulSoup

url = "https://www.imdb.com/chart/moviemeter/"

# Определяем заголовки для имитации запроса браузера
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}

response = requests.get(url, headers=headers)

if response.status_code == 200:
    soup = BeautifulSoup(response.text, 'html.parser')
    
    title_columns = soup.find_all('td', class_='titleColumn')
    
    movies = []
    for title_column in title_columns:
        movie_name = title_column.a.get_text(strip=True)
        movies.append(movie_name)
        
    for i, movie in enumerate(movies, start=1):
        print(f"{i}. {movie}")
else:
    print("Не удалось получить веб-страницу. Код состояния:", response.status_code)

Этот код работает. Когда вы его запускаете, он выводит результаты…

Парсинг веб-страниц с использованием ChatGPT — полное руководство с примерами

Парсинг динамических веб-сайтов

Динамические веб-сайты имеют контент, который меняется без перезагрузки страницы, такие как бесконечная прокрутка, вкладки, всплывающие окна и т. д. Для парсинга таких сайтов требуются автоматизированные браузеры, такие как Selenium.

Вот пример сбора данных о продуктах с сайта электронной торговли:

инструкции

Extract product titles and pricing from amazon.com using Python and Selenium

Wait for 10 seconds for page load

Locate elements with:
- Tag: div
- Class: product

Within each element:
- Find <h3> tag and extract text for title
- Find <p> tag and extract text for price

Click on 'Next Page' button to load more products

Export scraped data to CSV file
Инструкции

Извлеките названия продуктов и цены с сайта amazon.com с использованием Python и Selenium.
Подождите 10 секунд для загрузки страницы.
Найдите элементы с:

Тег: div
Класс: product Внутри каждого элемента:
Найдите тег <h3> и извлеките текст для заголовка.
Найдите тег <p> и извлеките текст для цены. Нажмите на кнопку 'Следующая страница', чтобы загрузить больше продуктов. Экспортируйте извлеченные данные в CSV-файл.

Сгенерированный код ChatGPT

from selenium import webdriver
from selenium.webdriver.common.by import By
import csv

driver = webdriver.Chrome()
driver.get("https://amazon.com")

driver.implicitly_wait(10)

products = driver.find_elements(By.CSS_SELECTOR, "div.product")

titles = []
prices = []

for product in products:
  title = product.find_element(By.TAG_NAME, "h3").text
  price = product.find_element(By.TAG_NAME, "p").text

  titles.append(title)
  prices.append(price)

next_button = driver.find_element(By.ID, "next_page")
next_button.click()

# Извлечение данных с последующих страниц

with open('output.csv', 'w') as file:
  writer = csv.writer(file)
  writer.writerow(['Заголовок', 'Цена'])
  writer.writerows(zip(titles, prices))

Этот код использует Selenium для загрузки динамического контента, извлечения данных и обработки пагинации. Данные экспортируются в CSV для анализа. В следующем разделе объясняется, как установить Selenium, если у вас его нет в системе.

Установка Selenium

Для использования Selenium для скрапинга динамических веб-сайтов, необходимо установить его вместе с драйвером браузера.

Шаги

Установите Селен:

pip install selenium

Установите драйвер браузера:

Для Хрома:

pip install chromedriver-autoinstaller

Для Фаерфокс:

pip install geckodriver-autoinstaller

Импортировать селен:

from selenium import webdriver

driver = webdriver.Chrome() # For Chrome
# driver = webdriver.Firefox() # For Firefox

Передайте драйвер в код ChatGPT:

Предоставьте объект драйвера ChatGPT для динамического очистки:

Use the provided driver object for dynamic scraping:

driver = webdriver.Chrome()

Затем ChatGPT сгенерирует код с использованием этого драйвера для очистки динамических страниц.

Здесь рассматриваются основы настройки Selenium для парсинга веб-страниц с помощью ChatGPT. Драйвер автоматически обрабатывает JavaScript, вызовы AJAX, бесконечную прокрутку и т. д., что обеспечивает беспрепятственный процесс очистки.

Основные выводы

  • Для динамических сайтов используйте Selenium и добавьте действия, такие как ожидание, клик и т. д.
  • Предоставляйте атрибуты элементов, такие как ID, класс, имя тега, для поиска данных. Обрабатывайте пагинацию или прокрутку страниц.
  • Проверяйте извлеченные данные перед экспортом.

Альтернативный подход — использование ChatGPT «Расширенный анализ данных»

Альтернативный подход, предоставляемый ChatGPT, — использование его интерпретатора кода или расширенного анализа данных . Здесь вместо предоставления инструкций по очистке можно напрямую загрузить HTML-код целевой страницы.

Предположим, мы хотим очистить страницу результатов поиска Amazon…

использование ChatGPT

Просто сохраните страницу в формате HTML на своем диске.

Затем просто перетащите его в раздел GPT4 — Расширенный анализ данных.

ChatGPT может понадобиться помощь в поиске заголовка… Используя элемент Chrome Inspect, мы замечаем, что заголовок находится в теге H2. Вставляем все это в ChatGPT

Парсинг веб-страниц с использованием ChatGPT — полное руководство с примерами

Вот подсказка…

Extract product title and price from the attached page HTML using Python and BeautifulSoup. Export results to CSV. Tht Title tag is in H2 like this... <h2 class="a-size-mini a-spacing-none a-color-base s-line-clamp-2">
Парсинг веб-страниц с использованием ChatGPT — полное руководство с примерами

Несмотря на то, что ему удалось получить названия, вы можете видеть, что он изо всех сил пытается получить цены… Итак, мы снова помогаем ChatGPT…

Парсинг веб-страниц с использованием ChatGPT — полное руководство с примерами

Успех! ChatGPT предоставляет нам данные…

Парсинг веб-страниц с использованием ChatGPT — полное руководство с примерами

Но давайте не будем останавливаться на достигнутом. Давайте запросим у него код, который сделал возможным получение данных. Используйте эту подсказку…

give me the code that makes this possible

ChatGPT с радостью вернет такой код…

import re
import csv
from bs4 import BeautifulSoup

# Define the path to the HTML file
file_path = 'path_to_your_html_file.html'

# Read the HTML file and create a BeautifulSoup object
with open(file_path, 'r', encoding='utf-8') as file:
    soup = BeautifulSoup(file.read(), 'html.parser')

# Function to extract price from a specific section of the HTML
def extract_price(section):
    # Look for span tags with class 'a-price' which usually contains the price
    price_tag = section.find('span', class_='a-price')
    # If a price tag is found, extract the price value from it
    if price_tag:
        # Extract the whole and fraction parts of the price and concatenate them
        whole_part_tag = price_tag.find('span', class_='a-price-whole')
        fraction_part_tag = price_tag.find('span', class_='a-price-fraction')
        if whole_part_tag and fraction_part_tag:
            # Concatenate the whole part, decimal point, and fraction part to form the full price
            whole_part = whole_part_tag.get_text(strip=True).replace(',', '')  # Remove commas in whole part
            fraction_part = fraction_part_tag.get_text(strip=True)
            return f"${whole_part}.{fraction_part}"
    return None  # Return None if no price is found

# List to hold the extracted product title and price pairs
products = []

# Loop through each product title tag to extract title and price pairs
for title_tag in soup.find_all('h2', class_='a-size-mini a-spacing-none a-color-base s-line-clamp-2'):
    title = title_tag.get_text(strip=True)  # Extract the product title
    # Get the parent section of the title tag which likely contains the price tag as well
    section = title_tag.find_parent('div', recursive=True)
    if section:  # Check if a parent div is found
        price = extract_price(section)  # Extract the price from the section
        products.append({'Title': title, 'Price': price})

# Define the path to the CSV file
csv_file_path = 'path_where_you_want_to_save_csv_file.csv'

# Write the extracted data to the CSV file
with open(csv_file_path, 'w', newline='', encoding='utf-8') as file:
    writer = csv.DictWriter(file, fieldnames=['Title', 'Price'])
    writer.writeheader()
    writer.writerows(products)

print(f"Data has been written to {csv_file_path}")

Когда использовать интерпретатор кода ChatGPT?

Некоторые преимущества использования интерпретатора кода: HTML-анализ вместо ручной проверки элементов Автоматически обрабатывает макет и структуру страницы. Может легче очистить несколько страниц

Используйте это, если на целевом сайте есть: Сложная или вложенная структура HTML. Трудно вручную определить атрибуты элемента. Пагинация, требующая автоматической обработки

Однако подход с использованием инструкций кода обеспечивает больший контроль над логикой очистки.

Полные примеры кода

Вот полные примеры кода, созданные выше для справки:

Статический парсинг сайта

import requests
from bs4 import BeautifulSoup

url = "https://www.imdb.com/chart/moviemeter/"

# Define headers to mimic a browser request
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}

response = requests.get(url, headers=headers)

if response.status_code == 200:
    soup = BeautifulSoup(response.text, 'html.parser')
    
    title_columns = soup.find_all('td', class_='titleColumn')
    
    movies = []
    for title_column in title_columns:
        movie_name = title_column.a.get_text(strip=True)
        movies.append(movie_name)
        
    for i, movie in enumerate(movies, start=1):
        print(f"{i}. {movie}")
else:
    print("Failed to retrieve the webpage. Status Code:", response.status_code)

Динамический парсинг сайта

from selenium import webdriver
from selenium.webdriver.common.by import By
import csv

driver = webdriver.Chrome()
driver.get("<https://ecomsite.com>")

driver.implicitly_wait(10)

products = driver.find_elements(By.CSS_SELECTOR, "div.product")

titles = []
prices = []

for product in products:
  title = product.find_element(By.TAG_NAME, "h3").text
  price = product.find_element(By.TAG_NAME, "p").text

  titles.append(title)
  prices.append(price)

next_button = driver.find_element(By.ID, "next_page")
next_button.click()

with open('output.csv', 'w') as file:
  writer = csv.writer(file)
  writer.writerow(['Title', 'Price'])
  writer.writerows(zip(titles, prices))

Парсинг интерпретатора кода

import re
import csv
from bs4 import BeautifulSoup

# Define the path to the HTML file
file_path = 'path_to_your_html_file.html'

# Read the HTML file and create a BeautifulSoup object
with open(file_path, 'r', encoding='utf-8') as file:
    soup = BeautifulSoup(file.read(), 'html.parser')

# Function to extract price from a specific section of the HTML
def extract_price(section):
    # Look for span tags with class 'a-price' which usually contains the price
    price_tag = section.find('span', class_='a-price')
    # If a price tag is found, extract the price value from it
    if price_tag:
        # Extract the whole and fraction parts of the price and concatenate them
        whole_part_tag = price_tag.find('span', class_='a-price-whole')
        fraction_part_tag = price_tag.find('span', class_='a-price-fraction')
        if whole_part_tag and fraction_part_tag:
            # Concatenate the whole part, decimal point, and fraction part to form the full price
            whole_part = whole_part_tag.get_text(strip=True).replace(',', '')  # Remove commas in whole part
            fraction_part = fraction_part_tag.get_text(strip=True)
            return f"${whole_part}.{fraction_part}"
    return None  # Return None if no price is found

# List to hold the extracted product title and price pairs
products = []

# Loop through each product title tag to extract title and price pairs
for title_tag in soup.find_all('h2', class_='a-size-mini a-spacing-none a-color-base s-line-clamp-2'):
    title = title_tag.get_text(strip=True)  # Extract the product title
    # Get the parent section of the title tag which likely contains the price tag as well
    section = title_tag.find_parent('div', recursive=True)
    if section:  # Check if a parent div is found
        price = extract_price(section)  # Extract the price from the section
        products.append({'Title': title, 'Price': price})

# Define the path to the CSV file
csv_file_path = 'path_where_you_want_to_save_csv_file.csv'

# Write the extracted data to the CSV file
with open(csv_file_path, 'w', newline='', encoding='utf-8') as file:
    writer = csv.DictWriter(file, fieldnames=['Title', 'Price'])
    writer.writeheader()
    writer.writerows(products)

print(f"Data has been written to {csv_file_path}")

Вопросы, которые могут возникнуть

Разрешает ли ChatGPT парсинг веб-страниц?

Да. Это законно с точки зрения условий ChatGPT.

Как заставить чатгпт читать сайт?

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

Откуда ChatGPT собирает данные?

На данный момент он не может самостоятельно парсить Интернет.

Может ли ChatGPT читать веб-страницу?

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

Заключение

В этой статье представлен подробный обзор парсинга веб-страниц с использованием ChatGPT с различными примерами и образцами кода. Ключевые выводы:

  • Проверьте элементы, чтобы определить данные, которые необходимо извлечь.
  • Предоставьте подробные инструкции на естественном языке.
  • Используйте искусственный интеллект ChatGPT для создания точных парсеров
  • Проверка и уточнение результатов с помощью итеративных подсказок
  • Рассмотрите такие инструменты, как интерпретатор кода или визуальные парсеры, в зависимости от варианта использования.

Парсинг веб-страниц можно автоматизировать без сложного кодирования, если стратегически использовать возможности ChatGPT. При использовании правильных методов можно извлечь данные практически с любого веб-сайта.

ChatGPT знаменует новую захватывающую эру интеллектуальной автоматизации!

Однако этот подход также имеет некоторые ограничения: Парсинговый код должен обрабатывать CAPTCHA, IP-блоки и другие меры защиты от парсинга. Запуск парсеров в вашей собственной инфраструктуре может привести к блокировке IP-адресов. Динамический контент требует специальной обработки

Похожие записи