@Omosh1roi

Как спарсить данные с сайта, если есть определенное кол-во ссылок (python)?

Есть код на 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
  • Вопрос задан
  • 105 просмотров
Пригласить эксперта
Ответы на вопрос 1
@borisalekseev
extra beginner junior python backend
Фундаментальный подход это здорово, но если можно решить задачу быстрее питоном, необязательно повиноваться всякой духоте типо прочитай 141123 книг а потом делай. Всё, что Вам нужно - загуглить что такое тип данных list в питоне, создать list с вашими ссылками, и пройтись по нему циклом for, при каждой итерации запуская код, который вы уже имеете (google: python list, python for loop)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы