КОДЕКС

Создание веб-парсера Newegg (часть 2)

Собираем все вместе

Добавление импорта

Приведенный выше код импортирует библиотеку Beautiful Soup, функцию urlopen, функцию BeautifulSoup и модуль csv. Вы увидите, как каждая из этих вещей используется, когда мы продолжим работу с кодом.

Получение HTML и выполнение синтаксического анализа

В Python вы можете импортировать функцию через другой псевдоним. Следовательно, request (url) и soup (page_html, ‘html.parser’) на самом деле являются urlopen (url) и BeautifulSoup (page_html, ‘html.parser’) соответственно.

В строках с 3 по 5 мы открываем URL, захватываем HTML и закрываем соединение. Строка 7 превращает HTML-код из нашего URL в проанализированный документ. Строка 8 вызывает find_all () для получения HTML-кода, непосредственно связанного с графическими картами, которые мы хотим очистить. Функция find_all () работает в этом случае, находя все элементы div, у которых есть атрибут класса со значением: «item-cell». Функция вернет список со всеми отдельными элементами div, соответствующими спецификациям атрибута.

На приведенном выше GIF-изображении вы можете видеть, что переход к элементу div с class = «item-cell» выделяет всю графическую карту MSI. Вот почему нам нужно найти все эти конкретные элементы div, потому что каждый из них содержит отдельную видеокарту.

Примечание. Я щелкнул правой кнопкой мыши и нажал «Проверить», когда курсор переместился вправо от кнопки «Просмотреть подробности». На видеозаписи такого действия не было. Вот как мне удалось вызвать исходный код HTML для веб-сайта.

Настройка CSV для записи

В приведенном выше коде мы настраиваем CSV-файл для хранения очищенных данных. Функция writerow () создаст нашу первую строку, состоящую из четырех столбцов. Эта строка будет индикатором того, какая информация хранится в каждом столбце. Позже в коде мы сделаем еще один вызов функции writerow (), чтобы непрерывно добавлять наши очищенные данные в каждый соответствующий столбец.

Обнаружение рекламы, получение данных и обработка исключений

Примечание. Цикл for в строке 1 будет записан под строкой: file_writer.writerow (['Brand', 'Product Name', 'Price', 'Shipping']) из раздела «Настройка CSV для записи в». .

Строка 2 содержит проверку на печально известное обнаружение рекламы. При поиске видеокарт на веб-сайте Newegg вы заметите, что среди всех других видеокарт есть реклама. Видеокарты на веб-сайте Newegg классифицируются с помощью элемента div с атрибутом: class = «item-cell». Однако реклама также классифицируется по этому же признаку. Это означает, что при первом вызове функции find_all () реклама будет включена в возвращаемый список. Следовательно, мы должны проверить наличие другого индикатора (в данном случае «txt-ads-link»), чтобы убедиться, что наш код выполняется только на видеокарте.

Строки с 4 по 8 извлекают название бренда и продукта.

Примечание. Переменные, в конце которых есть «тег» (brand_tag, tittle_tag и т. Д.), Хранят конкретный HTML-тег, содержащий рассматриваемые данные (название бренда, название продукта и т. Д.).

Строки с 10 по 28 извлекают информацию о ценах и доставке.

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

Обработка исключений - ключевой компонент этого кода парсера. Я настроил его так, что в случае возникновения ошибки имя ошибки, сообщение об ошибке и ячейка (видеокарта), в которой возникла ошибка, будут напечатаны на консоли / терминале. Код для веб-парсера чрезвычайно подвержен ошибкам и ошибкам. Это потому, что веб-сайты (особенно Newegg) постоянно обновляются. Код, который до этого работал отлично, однажды столкнется с препятствием при внесении малейшего изменения (из-за того, что изменение не учитывается). Хотя в какой-то момент могут возникнуть ошибки, обработка исключений позволяет программе обработать ошибку и продолжить поиск графических карт, у которых нет основных проблем. Оператор finally будет выполняться независимо от того, выброшено ли исключение или нет, чтобы гарантировать, что данные будут записаны в файл CSV.

Последние мысли

Я буду исправлять любые ошибки и поддерживать / обновлять код веб-парсера на моем GitHub (ссылка на который будет приведена в ссылках ниже). Каждый раз, когда вы запускаете код, кажется, что Newegg добавила на свой сайт новый нюанс. Тем не менее, я буду продолжать пытаться решать повторяющиеся проблемы, которые возникают в процессе.

использованная литература

Додзё Data Science. (2017, 6 января). Введение в парсинг веб-страниц с помощью Python и Beautiful Soup. [YouTube видео]. Додзё Data Science. Получено с https://www.youtube.com/watch?v=XQgXKtPSzUI&t=205s

Мое репозиторий на GitHub для кода парсера.