Есть код на Python, я взял его с интернета, чуть-чуть допилил для себя, но сейчас возник один вопрос.
У меня есть ссылки с которых нужно спарсить данные, я в питоне совсем зеленый, не знаю как задавать вопросы в гугле, чтобы правильно получить ответы...
Так вот: имеем сейчас код, который парсит данные с одной ссылки, а надо чтобы он парсил данные со всех ссылок, которые я вставлю, но пока не знаю как это реализовать..(
для примера прилагаю ссылки на 3 товара:
https://www.miele.ru/domestic/oven-1451.htm?mat=11...
https://www.miele.ru/domestic/oven-1451.htm?mat=11...
https://www.miele.ru/domestic/oven-1451.htm?mat=11...
"""Парсинг сайтов"""
import requests # для работы с запросами.
from bs4 import BeautifulSoup # разбирает HTML страницу, делает из неё объект.
import csv # для создания файла, который можно потом открыть в EXEL или OpenOffice.
FILE_NAME = 'toys.csv'
HOST = 'https://www.miele.ru' # сайт, который мы будем пастить.
URL = 'https://www.miele.ru/domestic/oven-1451.htm?mat=11124400&name=H_7164_BP' # url страницы,которую будем пастить.
# Прописываем заголовки, чтобы сайт не подумал, что мы бот.
HEADERS = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,'
'*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/87.0.4280.141 Safari/537.36'
}
# обращение к странице, чтобы получить HTML.
def get_html(url, params=''):
r = requests.get(url, headers=HEADERS, params=params) # запрашиваем данные со страницы.
return r
# получаем контент со страницы (c одной).
def get_content(html):
soup = BeautifulSoup(html, 'html.parser') # сохраняем объект страницы.
items = soup.find_all('div', class_='cc-productDetailHead')
toys = []
for item in items:
toys.append(
{
'title': item.find('div').text,
'model': item.find('strong').text,
'price': item.find('div', class_='priceWrapper').text,
#'linc': HOST + item.find('div', class_='cc-product-tile__button-wrapper').find('a').get('href'),
'photo': item.find('a', class_='cloud-zoom-gallery active main').get('href'),
'othphoto': item.find_all('a', class_='cloud-zoom-gallery')[1].get('href')
}
)
return toys
# Промежуточный тест:
# html = get_html(URL)
# print(get_content(html.text))
""" Функция записи данных """
def save_doc(items, path):
with open(path, 'w', newline='') as file:
writer = csv.writer(file, delimiter=';', dialect='excel')
writer.writerow(['name : Название', 'product_model', 'price : Цена', 'image : Иллюстрация', 'othphoto']) # Первая строка.
for item in items:
writer.writerow([item['title'], item['model'], item['price'], item['photo'], item['othphoto']])
""" Основная функция парсинга """
def pars():
page_count = int(input('Укажите количество страниц для парсинга: '))
html = get_html(URL)
if html.status_code == 200: # Проверям приходят ли к нам данные со страницы.
toys = []
for page in range(1, page_count + 1):
print(f'Парсим {page} страницу')
params = '?count=9&PAGEN_3=' + str(page)
html = get_html(URL + params)
toys.extend(get_content(html.text))
print('Парсинг закончен.')
save_doc(toys, FILE_NAME)
else:
print('ERROR !')
pars()
""" Функция чтения csv файла в консоль """
with open("toys.csv") as r_file:
# Создаем объект словарь, указываем символ-разделитель ","
file_reader = csv.DictReader(r_file, delimiter=";")
# Счетчик для подсчета количества строк и вывода заголовков столбцов
count = 0
# Считывание данных из CSV файла
for row in file_reader:
if count == 0:
# Вывод строки, содержащей заголовки для столбцов.
print(' ', " \
".join(row))
# Вывод содержимого строки по ключу.
print(f' {row["name : Название"]} -- {row["product_model"]} -- {row["price : Цена"]}\
-- {row["image : Иллюстрация"]} -- {row["othphoto"]}')
count += 1