Парсинг контента веб-сайта с помощью Python
Из моей статьи Puppeteer. make yourself at chrome. я получил некоторую идею об автоматизации поиска контента через YouTube. Что, если мы хотим спарсить некоторый контент с веб-сайта? Возможно ли это? Ответ - да. И сегодня мы будем парсить контент с веб-сайта электронной коммерции Flipkart, поэтому давайте посмотрим, что мы хотим.
Цель
Мы хотим спарсить контент Apple iPhone 11 с веб-сайта Flipkart.
- Название продукта
- Ссылка на продукт
- Цена
- Описание продукта
- Рейтинг отзывов
- Комментарии к отзывам
Подготовка
Для начала нам нужно установить несколько инструментов, чтобы начать писать код.
- Python3
- Visual Studio Code
В этой статье я предполагаю, что у вас уже установлены эти два инструмента. Так что давайте перейдем к кодированию.
Приступим к кодированию
Создайте папку с названием flipkart-scrape и создайте файл с названием main.py
mkdir flipkart-scrape
touch main.py
Затем мы импортируем библиотеки, которые мы хотим использовать для парсинга.
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time
from bs4 import BeautifulSoup
Мы используем selenium для открытия веб-драйвера Chrome и bs4 для преобразования содержимого в формат BeautifulSoup.
И после этого добавьте этот код для начала парсинга.
driver = webdriver.Chrome(ChromeDriverManager(cache_valid_range=0).install())
link = "[https://www.flipkart.com/apple-iphone-11-white-64-gb/p/itm2644c3764fc54?pid=MOBFKCTSHAWGGFHM&lid=LSTMOBFKCTSHAWGGFHMCPQSMX&marketplace=FLIPKART&srno=s_1_4&otracker=AS_QueryStore_OrganicAutoSuggest_1_9_na_na_ps&otracker1=AS_QueryStore_OrganicAutoSuggest_1_9_na_na_ps&fm=organic&iid=505d8cab-debd-4157-8157-c6c910875182.MOBFKCTSHAWGGFHM.SEARCH&ssid=cie4w1suy80000001601195482047&qH=7b7504afcaf2e1ea](https://www.flipkart.com/apple-iphone-11-white-64-gb/p/itm2644c3764fc54?pid=MOBFKCTSHAWGGFHM&lid=LSTMOBFKCTSHAWGGFHMCPQSMX&marketplace=FLIPKART&srno=s_1_4&otracker=AS_QueryStore_OrganicAutoSuggest_1_9_na_na_ps&otracker1=AS_QueryStore_OrganicAutoSuggest_1_9_na_na_ps&fm=organic&iid=505d8cab-debd-4157-8157-c6c910875182.MOBFKCTSHAWGGFHM.SEARCH&ssid=cie4w1suy80000001601195482047&qH=7b7504afcaf2e1ea)"
driver.get(link)
timeout = 5
try:
element_present = EC.presence_of_element_located((By.ID, 'container'))
WebDriverWait(driver, timeout).until(element_present)
except TimeoutException:
print("Превышено время ожидания загрузки страницы")
Затем запустите
pip3 install selenium webdriver_manager bs4
python3 main.py
Он откроет Chrome и перейдет по ссылке Iphone11
В коде выше мы просто устанавливаем Chrome и сохраняем его в переменной с названием driver. Затем мы выполняем драйвер для перехода по нашей ссылке. После этого мы ждем, пока не появится идентификатор с названием container. Если он не появляется и время ожидания истекает, мы выводим ошибку, что не можем получить элемент с идентификатором container.
Затем мы получим содержимое страницы и преобразуем его в формат BeautifulSoup, добавив этот код
content = driver.page_source
soup = BeautifulSoup(content, 'html.parser')
И содержимое страницы будет сохранено в переменной soup. Теперь нам нужно получить уникальный класс, например, название продукта. Мы открываем Chrome, открываем URL-адрес Flipkart и находим имя класса, которое мы хотим спарсить, открыв инструменты разработчика и проверив имя класса продукта. Вот так.
После того, как мы получили имя класса, мы добавляем его в код, например, так
name = soup.find('span', attrs={'class': '_35KyD6'}).text
price = soup.find('div', attrs={'class': '_3qQ9m1'}).text
description = soup.find('div', attrs={'class': '_38NXIU'}).text
rating = soup.find('div', attrs={'class': '_1i0wk8'}).text
comment = soup.find('div', attrs={'class': 'qwjRop'}).text
Код просто говорит: найдите span или div, содержащий указанный класс, а затем получите текст из него.
Последний шаг. Сохраните результат в переменной и выведите его на экран для проверки.
result = {
"Название продукта" : name,
"Ссылка на продукт" : link,
"Цена продукта" : price,
"Описание продукта" : description,
"Рейтинг продукта" : rating,
"Комментарий к отзыву" : comment,
}
print(result)
Результат будет выглядеть примерно так.
И когда мы запустим полный код, он будет выглядеть так.
Вот и все для простого парсинга данных с Flipkart с помощью Python. Полный код доступен здесь.
klogic/flipkart-scrape-python
flipkart-scrape-python. . Внести вклад в развитие klogic/flipkart-scrape-python, создав учетную запись на GitHub.
github.com