Автоматизация и парсинг процесса получения информации о продукте с веб-страницы (Python, Selenium, Chrome)
Table Of Content
- Импорт необходимых модулей и пакетов
- Путь к исполняемому файлу ChromeDriver
- Создание экземпляра ChromeOptions для настройки браузера Chrome
- Создание объекта Service с указанным путем к драйверу
- Создание объекта WebDriver с настроенным сервисом и параметрами
- **Ссылки на продукты**
- Пустой список для хранения ссылок на продукты
- Определение функции для извлечения ссылок на продукты из заданного URL
- **Детали продуктов**
- Списки для хранения деталей продуктов
- Определение функции для извлечения деталей продуктов из списка ссылок
- Введите эту ссылку
- Удаление повторяющихся ссылок из списка
- Введите имя файла, которое вы хотите задать
- **Очистка данных**
- **Преобразование URL-адресов изображений из формата base64 в обычные URL-адреса**
- Перебираем каждый URL-адрес в столбце 'Image Url' DataFrame
- Обновляем столбец 'Image Url' в DataFrame с преобразованными URL-адресами
- Сохраняем измененный DataFrame в CSV-файл
- Заключительные заметки
Исходный код: https://github.com/nassrkhan/Bema_Site
Для загрузки chromedriver: https://sites.google.com/chromium.org/driver/
Этот код - это скрипт на языке Python, который автоматизирует процесс получения информации о продукте с веб-страницы с использованием библиотеки Selenium и сохраняет информацию в CSV-файле. Давайте рассмотрим код пошагово:
# Импорт необходимых модулей и пакетов
import csv # Модуль для работы с CSV-файлами
from selenium import webdriver # Пакет для автоматизации веб-браузера
import undetected_chromedriver as uc # Пакет для использования браузера Chrome с Selenium
from selenium.webdriver.common.by import By # Модуль для поиска элементов на веб-странице
from selenium.webdriver.chrome.options import Options # Модуль для настройки параметров Chrome
from selenium.webdriver.chrome.service import Service # Модуль для управления службой ChromeDriver
from selenium.webdriver.support.ui import WebDriverWait # Модуль для реализации функций ожидания
from selenium.webdriver.support import expected_conditions as EC # Модуль для определения ожидаемых условий
# Путь к исполняемому файлу ChromeDriver
driver_path = "./chromedriver.exe"
# Создание экземпляра ChromeOptions для настройки браузера Chrome
chrome_options = Options()
# Создание объекта Service с указанным путем к драйверу
service = Service(driver_path)
# Создание объекта WebDriver с настроенным сервисом и параметрами
driver = webdriver.Chrome(service=service, options=chrome_options)
Разберем каждую строку кода:
После выполнения этого кода у вас будет полностью настроенный объект driver
, который можно использовать для автоматизации действий в браузере Chrome, таких как переход на веб-страницы, взаимодействие с элементами или извлечение данных.
Ссылки на продукты
Функция с названием Products_links
, которая извлекает ссылки на продукты из заданного URL. Ссылки хранятся в списке All_Product
.
# Пустой список для хранения ссылок на продукты
All_Product = []
# Определение функции для извлечения ссылок на продукты из заданного URL
def Products_links(url):
# Открытие URL в браузере
driver.get(url)
# Ожидание появления элемента обертки списка
list_wrapper = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "list-wrapper")))
# Поиск всех элементов <a> внутри обертки списка
a_elements = list_wrapper.find_elements(By.TAG_NAME, "a")
# Перебор каждого элемента <a> и извлечение атрибута href (ссылки)
for a in a_elements:
All_Product.append(a.get_attribute('href'))
# Сохранение ссылок на продукты в переменной 'pro' и очистка списка 'All_Product'
pro = All_Product
All_Product.clear()
# Возврат ссылок на продукты
return pro
Функцию Products_links
можно вызвать с URL в качестве аргумента, чтобы извлечь ссылки на продукты. Ссылки будут сохранены в списке All_Product
и возвращены функцией.
Функция с названием Product_details
, которая извлекает различные детали продуктов из списка ссылок и сохраняет информацию в отдельных списках. Она также записывает собранные данные в CSV-файл.
Детали продуктов
Функция с названием Product_details
, которая извлекает различные детали продуктов из списка ссылок и сохраняет информацию в отдельных списках. Она также записывает собранные данные в CSV-файл.
# Списки для хранения деталей продуктов
Title = []
Title_url = []
Product_number = []
Short_des = []
Price = []
Image_url = []
Description = []
# Определение функции для извлечения деталей продуктов из списка ссылок
def Product_details(file_name, links):
c = 0
for i in links:
# Открываем ссылку в браузере
driver.get(i)
driver.implicitly_wait(15)
try:
h1 = driver.find_element(By.TAG_NAME, "h1").text
Title.append(h1)
except:
Title.append('')
# Добавляем ссылку в список Title_url
Title_url.append(i)
try:
Pro_num = driver.find_element(By.CLASS_NAME, "product-info-sku").text
Product_number.append(Pro_num)
except:
Product_number.append('')
try:
shor_des = driver.find_element(By.CLASS_NAME, "digest").text
Short_des.append(shor_des)
except:
Short_des.append('')
try:
prc = driver.find_element(By.CLASS_NAME, "price").text
Price.append(prc)
except:
Price.append('')
try:
img_element = driver.find_element(By.TAG_NAME, "img")
img_link = img_element.get_attribute("src")
Image_url.append(img_link)
except:
Image_url.append('')
try:
des = driver.find_element(By.CLASS_NAME, "main-content").text
Description.append(des)
except:
Description.append('')
c = c + 1
print(f"{c} завершено.")
# Записываем собранные данные в CSV-файл
with open(file_name + '.csv', 'w', encoding='utf-8', newline='') as file:
writer = csv.writer(file)
writer.writerow(['Название', 'Ссылка на название', 'Артикул', 'Краткое описание', 'Цена', 'Ссылка на изображение', 'Описание'])
for i in range(len(Title)):
writer.writerow([Title[i], Title_url[i], Product_number[i], Short_des[i], Price[i], Image_url[i], Description[i]])
return file_name
# Введите эту ссылку
#https://www.bema.no/bensinslanger/category1164.html#/
url = input("Введите URL: ")
links = Products_links(url)
После выполнения этого кода переменная links
будет содержать ссылки на продукты, полученные из введенного URL с помощью функции Products_links
.
from collections import OrderedDict
# Удаление повторяющихся ссылок из списка
links = list(OrderedDict.fromkeys(links))
После выполнения этого кода список links
будет содержать уникальные ссылки на продукты, с удалением любых дубликатов, сохраняя при этом исходный порядок.
# Введите имя файла, которое вы хотите задать
file_name = input("Введите имя файла: ")
Product_details(file_name, links)
driver.quit()
Очистка данных
import base64
import requests
import pandas as pd
Преобразование URL-адресов изображений из формата base64 в обычные URL-адреса
base = []
# Перебираем каждый URL-адрес в столбце 'Image Url' DataFrame
for url in df1['Image Url']:
if url.startswith('data:image'):
base64_link = url
binary_data = base64.b64decode(base64_link.split(",")[1])
response = requests.post("https://api.imgbb.com/1/upload",
files={"image": binary_data},
data={"key": "878da7435f172283e4ada776b37ed00a"})
regular_link = response.json()["data"]["url"]
base.append(regular_link)
else:
base.append(url)
# Обновляем столбец 'Image Url' в DataFrame с преобразованными URL-адресами
df1['Image Url'] = base
# Сохраняем измененный DataFrame в CSV-файл
df1.to_csv("original.csv", index=False)
Заключительные заметки
Спасибо, что уделили время чтению этого объяснения! Если вам нужен опытный фрилансер по Python для ваших проектов, я готов к сотрудничеству. Как опытный разработчик Python, я могу помочь вам с различными задачами, включая парсинг веб-сайтов, автоматизацию, анализ данных и многое другое. Не стесняйтесь связаться со мной по адресу https://www.freelancer.com/u/NassrKhan, чтобы обсудить подробности вашего проекта.
Если вам понравилась эта информация, я был бы признателен, если бы вы поддержали этот ответ аплодисментами 👏. Ваш отзыв важен и побуждает меня предоставлять более полезный контент.
Не стесняйтесь обращаться, если у вас возникнут дополнительные вопросы или если вам нужна помощь с Python или любыми другими темами, связанными с программированием. Счастливого кодирования!