CoderCastrov logo
CoderCastrov
Руби

Недосмотр Астронома

Недосмотр Астронома
просмотров
3 мин чтение
#Руби
Table Of Content

    Для проекта, чтобы научиться использовать различные техники Ruby и веб-скрапинг, я создал небольшую программу для сбора данных с главной страницы веб-сайта и его отдельных страниц. Поскольку это был сайт, на котором я много времени проводил несколько лет назад, я решил попробовать его на BoardGameGeek. Предпосылка была проста: получить данные из списка топ-100 игр, а затем перейти на их отдельные страницы и получить данные оттуда.

    Конечно, некоторые веб-сайты можно легко скрапить, а некоторые нет. Конечно же, я, будучи ответственным и скромным человеком, сначала проверил, можно ли скрапить BGG с помощью таких гемов, как open-uri и nokogiri, как планировалось. Любое иное решение было бы неразумным; я не хотел бы узнать посередине проекта, что сайт на самом деле не скрапируемый, моя работа была потрачена и мне нужно выбрать совершенно другой сайт. Это был бы неприятный шок, поэтому хорошо, что я заранее проверил, чтобы убедиться, что этого не произойдет!

    ...так что, представьте мое удивление, когда, на две трети пути к завершению проекта, я обнаружил, что я не проверил должным образом. Список топ-100 игр был скрапируемым, это работало нормально. Но отдельные страницы игр были намного более сложными. И когда я, наконец, приступил к их скрапингу, я обнаружил, что из-за всего JavaScript, используемого в них, их на самом деле нельзя скрапить.

    Это не должно было быть сюрпризом. Отдельные страницы игр были намного более сложными, чем список топ-100; логично, что им понадобится JavaScript, даже если список топ-100 этого не требует. Но я не подумал об этом, когда проверял сайт перед началом проекта, чтобы убедиться, что его можно скрапить. Я просто проверил страницу списка топ-100, убедился, что ее можно скрапить, и подумал, что это означает, что я в порядке.

    Моя ошибка заключалась в том, что я сделал вывод "BoardGameGeek можно скрапить", когда на самом деле я подтвердил только "Страницу списка топ-100 игр на BoardGameGeek можно скрапить".

    Мне вспоминается шутка о астрономе, физике и математике, которые едут на поезде в Шотландию. Они смотрят в окно и видят черную овцу. Астроном говорит: "Овцы в Шотландии черные!" Физик говорит: "Нет, некоторые овцы в Шотландии черные." Математик отвечает: "Существует по крайней мере одна овца в Шотландии, которая черная хотя бы с одной стороны."

    Моя ошибка здесь такая же, как у астронома: я предположил, что подтвердил больше, чем на самом деле.

    (Я не знаю, почему первый человек в этой шутке - астроном. Обобщение по одному факту не является стереотипом о астрономах, который я когда-либо слышал или понимал, учитывая все данные, которые собирают астрономы. Шутки иногда бывают странными.)

    В конечном итоге, все получилось нормально. Это был неудачный случай, но не преодолимый; мне просто пришлось использовать другой подход, получая данные из API BGG (что я узнал, что существует). Это делает программу немного странной, получая данные двумя очень разными способами на разных этапах программы, но это нормально. Цель проекта - учиться, и это просто означает, что я получу немного больше опыта работы с XML и API, которого я не получил бы иначе.

    Так что все получилось нормально. Но в будущем я буду иметь в виду, чтобы не совершать ошибку астронома.

    _Проект BGG scraper можно найти здесь: _https://github.com/sopharsogood/boardgamegeek-scraper