Skip to content

Latest commit

 

History

History
194 lines (148 loc) · 12.1 KB

lab2.md

File metadata and controls

194 lines (148 loc) · 12.1 KB

Лабораторная работа № 2

Web Scraping

Теория

csv

Для работы с CSV файлами в Python можно использовать встроенный модуль csv.

Пример:

import csv

# данные для записи
data = [
    ["Имя", "Возраст", "Город"],  # Заголовки
    ["Алексей", 30, "Москва"],
    ["Мария", 25, "Санкт-Петербург"],
    ["Иван", 22, "Екатеринбург"]
]

# запись данных в CSV файл
with open('data.csv', mode='w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    writer.writerows(data) # запись всех строк

# дозапись в файл
with open('data.csv', mode='a', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    writer.writerow(["Ирина", 33, "Сочи"])

Создание собственных итераторов

Итераторы — это объекты, которые позволяют перебирать другие объекты, такие как списки и кортежи, без необходимости обращаться к ним по индексу. Чтобы создать собственный итератор, необходимо в классе реализовать два метода: __iter__() и __next__().

  • __iter__() — возвращает экземпляр итератора. Обычно это просто self.

  • __next__() — возвращает следующий элемент последовательности. Если элементов больше нет, он должен вызвать исключение StopIteration для уведомления о завершении перебора.

Пример создания собственного итератора:

class SimpleIterator:
    def __init__(self, limit):
        self.limit = limit  # ограничение
        self.counter = 0  # счётчик

    def __iter__(self):
        return self

    def __next__(self):
        if self.counter < self.limit:
            self.counter += 1
            return self.counter
        else:
            raise StopIteration

iterator = SimpleIterator(3)

for val in iterator:
    print(val)

Результат работы:

1
2
3

requests

requests — это библиотека Python для работы с HTTP-запросами. Она предоставляет простой и удобный способ взаимодействия с веб-ресурсами.

Установка:

pip install requests

get — это основной HTTP-метод для получения данных с сервера. Он используется когда нужно:

  • Загрузить веб-страницу
  • Получить данные API
  • Скачать файл
  • Выполнить поиск

Пример:

headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
    }
response = requests.get("https://my-url.com", headers=headers)
if response.ok:
    print(response.content)

BeautifulSoup

BeautifulSoup — это библиотека Python для парсинга HTML и XML документов. Она создает дерево объектов из разобранной страницы, что позволяет легко извлекать и манипулировать данными.

Установка:

pip install beautifulsoup4

Основные возможности:

  • Парсинг "грязного" HTML — работает даже с некорректной разметкой
  • Простой поиск — мощные методы для нахождения элементов
  • Навигация по дереву — перемещение между элементами
  • Изменение документа — добавление, удаление, изменение тегов

Пример:

from bs4 import BeautifulSoup
import requests

# Получаем HTML страницу
url = "https://example.com"
response = requests.get(url)
html = response.text

# Создаем объект BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')

# Извлекаем заголовок страницы
title = soup.find('title')
print(f"Заголовок страницы: {title.text}")

# Находим все ссылки
links = soup.find_all('a')
print(f"Найдено ссылок: {len(links)}")

# Выводим текст всех ссылок
for link in links:
    print(link.get_text(), link.get('href'))

Полезные ссылки

Задание

Общее задание

Варианты 1-10:

  • Скачайте не менее 30 изображений обложек книг (далее для краткости - обложка) своего варианта с помощью requests и BeautifulSoup с сайта https://books.toscrape.com/.

Варианты 11-20:

  • Скачайте не менее 30 аудиофайлов своего варианта с помощью requests и BeautifulSoup с сайта https://sound-effects.ru/.

Для всех вариантов:

  • Составьте аннотацию в виде csv-файла, в котором будет абсолютный и относительный путь к каждому файлу.
  • Напишите итератор по путям к файлам - используйте в качестве параметра конструктора файл-аннотации или путь к папке.

Параметры по варианту, путь к папке для сохранения и путь к файлу аннотации необходимо передавать через аргументы командной строки.

Варианты

  1. Напишите программу, которая скачивает минимум по одной обложке книг каждого жанра, представленного на сайте. Пользователь задаёт количество книг одного жанра.

  2. Пользователь задаёт один или несколько жанров книг. Напишите программу, которая скачивает равное количество обложек каждого заданного жанра.

  3. Напишите программу, которая скачивает обложки книг случайных жанров. Пользователь задаёт количество жанров.

  4. Пользователь задаёт жанры, которые нужно исключить из списка скачивания. Напишите программу, которая скачивает обложки книг случайных жанров, кроме исключённых пользователем.

  5. Пользователь задаёт минимальную цену книги. Напишите программу, которая скачивает обложки книг с ценой выше заданной.

  6. Напишите программу, которая скачивает обложки самых дорогих книг на сайте. Пользователь задаёт количество скачиваемых книг.

  7. Пользователь задаёт рейтинг книги. Напишите программу, которая скачивает обложки книг с заданным рейтингом.

  8. Пользователь задаёт минимальный рейтинг книги. Напишите программу, которая скачивает обложки книг с рейтингом не ниже заданного.

  9. Пользователь задаёт ключевые слова для поиска (одно или несколько). Напишите программу, которая скачивает обложки книг с одним из ключевых слов в названии.

  10. Пользователь задаёт минимальное количество книг в наличии. Напишите программу, которая скачивает обложки книг с количеством в наличии не меньше заданного.

  11. Пользователь задаёт одну или несколько категорий звуков. Напишите программу, которая скачивает равное количество звуков каждой заданной категории.

  12. Напишите программу, которая скачивает звуки случайных категорий. Пользователь задаёт количество звуков.

  13. Пользователь задаёт категории, которые нужно исключить из списка скачивания. Напишите программу, которая скачивает звуки случайных категорий, кроме исключённых.

  14. Пользователь задаёт минимальную и максимальную длительность аудиозаписи. Напишите программу, которая скачивает звуки с длительностью в выбранном диапазоне.

  15. Пользователь задаёт минимальный и максимальный размер аудиофайла. Напишите программу, которая скачивает звуки с размером в выбранном диапазоне.

  16. Напишите программу, которая скачивает звуки с самым высоким рейтингом в своей категории. Пользователь задаёт категории (одну или несколько) и количество звуков для скачивания в каждой категории.

  17. Напишите программу, которая скачивает звуки с самым маленьким количеством скачиваний в своей категории (одна категория - один звук). Пользователь задаёт количество категорий.

  18. Напишите программу, которая скачивает звуки с самым высоким рейтингом на сайте. Пользователь задаёт количество звуков для скачивания.

  19. Пользователь задаёт ключевые слова для поиска (одно или несколько). Напишите программу, которая скачивает звуки с одним из ключевых слов в названии.

  20. Напишите программу, которая скачивает случайные звуки с сайта. Пользователь задаёт количество звуков.