Парсим товары на сайте при помощи Python
В прошлой статье я рассказывал о том, как при помощи python и библиотеки requests получить данные по API и обработать их. В этой статье я покажу, как получить (спарсить) данные с сайта у которого нет доступа к API. Для этого напишем скрипт на языке python, с применением библиотек requests и Beautiful Soup.
Requests – библиотека для получения, данных из интернета. Позволяет создавать запросы к сайтам и получать ответы с запрошенными данными.
Beautiful Soup — библиотека для синтаксического разбора файлов HTML/XML. Она содержит набор функций и методов, которые позволяют легко найти и получить нужный элемент веб-страницы или его содержимое. Для работы с библиотекой, вы должны знать основы html и css.
Задача
Многие интернет магазины следят за ценами конкурентов и в зависимости от конкурентов корректируют цены на свои товары. Например, у нас интернет магазин смартфонов. Чтобы сэкономить время менеджера создадим скрипт, который будет парсить товары сайта dns-shop.ru из раздела смартфоны и сохранять данные в csv файл.
Сохранять в csv будем следующие параметры: Название товара, Цена, Ссылка на товар
Таким образом мы сэкономим время менеджера на выписывание товаров в эксель.
Алгоритм работы скрипта:
- С помощью цикла получаем все страницы каталога из категории смартфоны
- По каждому товару находим элементы веб страницы, в которых хранятся параметры: товар, цена, ссылка на товар
- Из элементов получаем значения параметров и записываем их в двумерный список.
- Проходим циклом по получавшемуся списку и преобразуем каждый элемент списка в строку
- Удаляем лишние символы из строки
- Записываем строку в csv файл
Ниже идет код с подробными комментариями, который решает эту задачу
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#подключаем бибилиотеку request import requests #подключаем бибилиотеку BeautifulSoup from bs4 import BeautifulSoup #создаем список для хранения данных о товарах d=[] # получаем страницы при помощи цикла for j in range(50): #указываем url и get параметры запроса url = 'https://www.dns-shop.ru/catalog/17a8a01d16404e77/smartfony/' # указываем get параметр с помощью которого определяется номер страницы par = {'p': j} # записываем ответ сервера в переменную r r = requests.get(url, params=par) # получаем объект BeautifulSoup и записываем в переменную soup soup = BeautifulSoup(r.text, 'html.parser') # с помощью циклам перебераем товары на странице и получаем из них нужные параметры for i in range(20): # получаем название товара product = soup.find_all('h3')[i].get_text() # получаем цену товара price = soup.find_all(class_='price_g')[i].get_text() # удаляем пробел из цены price = price.replace(" ", "") #получаем ссылку на товар link = soup.find_all(class_='show-popover ec-price-item-link', attrs={'data-role' : 'product-cart-link'})[i]['href'] #добавляем домен к ссылке link = 'www.dns-shop.ru' + link # добавляем данные о товаре в список d.append([product, price, link]) #открываем файл на запись with open('C:/Users/admin1/Desktop/dns.csv', 'w') as ouf: #перебираем элементы списка d for i in d: #преобразуем элемент списка в строку i=str(i) #очищаем строку от ненужных символов i=i.replace("\'", "") i=i.replace("[", "") i=i.replace("]", "") #записываем строку в файл ouf.write(i + '\n') |
Открываем получившийся файл в эксель и выполняем разделение текста по столбцам.
В итоге получаем таблицу из 3 столбцов: товар, цена, ссылка на товар
При необходимости можно улучшить скрипт и заложить в него какой-нибудь алгоритм обработки данных. Например, мы можем выгружать список наших товаров и с помощью скрипта сравнивать цены на товары с конкурентом.