К вопросу об эффективности

Привет.
Сегодня моему коллеге понадобилось внести количество населения в городах России в его табличку cities в БД. Он, конечно, начал писать парсер Википедии, дабы добыть нужную информацию из страниц городов на сайте. То есть, он хотел обращаться к Википедии примерно так:

http://ru.wikipedia.org/wiki/<название города>

Он просто обращался по этому адресу при помощи php-функции file_get_contents(), но ему возвращалась 403 ошибка. Я обратился телнетом к странице и узнал, что Википедия требует присутствие заголовка User-Agent в HTTP-запросе.
Показал коллеге как юзать telnet и формировать HTTP-запрос =) Этим убедил его в том, что ему нужно юзать cURL. И он принялся писать свой мега-парсер.

Но лично я получил требуемый список городов за 5 минут. Как я это сделал? Я просто использовал более подходящие инструменты и шел легким путем.

Для начала я нашел HTML-табличку со списком городов и населением в них. Потом я скопировал эту табличку при помощи firebug в отдельный HTML-файл, подключил туда JQuery с Google CDN, и написал абсолютно тупой джаваскрипт, который обходил табличку и забирал оттуда нужные данные, а потом писал их в лог при помощи console.log(). Знаю, что можно было выполнить свой JS прямо на странице Википедии, но не знаю почему так не сделал :). Дальше осталось только передать эти данные коллеге.
Я потратил на это всего минут 5, мой коллега потратил бы на это половину рабочего дня, т.к. парсинг HTML-страниц в PHP это дело непростое, там нет Mechanize, к тому же Википедия может забанить по IP при парсинге кучи страниц :).

Вот как-то так, стоит всегда использовать подходящие инструменты и немного задействовать программерскую смекалку.

Also interesting

  • No Related Post

Tags:

7 Responses to “К вопросу об эффективности”

  1. Sb says:

    Поделись , а =)а я тебе географическую привязку к городам и селам =)))

  2. Ouch! says:

    Поделиться чем? Базой с городами?

    • Sb says:

      Города - численность. ну и сурц конечно поглядеть =)) А вообще парсить хтмл страницы - это адская фигня . Но у меня тут типа “фреймворк” уже есть =))) Я их тут парсю часто =) Пожизни надо какую-нить фигню стырить где-нить =)

      • Ouch! says:

        Ну базу могу дать. Сурц - че в нем смотреть, алгоритм действий я написал, делается это за 5 минут. Для парсинга могу посоветовать Perl или Ruby, для них есть Mechanize - ничего удобнее для парсинга я в жизни не видел. Посмотри сам.

  3. Georgy says:

    > Для начала я нашел HTML-табличку со списком городов и населением в них

    Так а зачем все эти махинации с jQuery. Данные уже получается готовые в таблице. Тупо в эксель вставить нельзя?

  4. Пульс says:

    Можно в эксель как правильно заметили выше, но при условии, что копирование хтмл-таблицы происходило из IE :)

    • Ouch! says:

      Я пробовал из файрфокса - получилась бяка =) Про Ие не подумал.
      Ну мой смособ все равно хорош - я там пробелы отрезал при помощи JS, и числа переводил из String сначала во Float, потом в Number. Т.е. вычисления какие-никакие были.

Leave a Reply