Как стать автором
Обновить

Комментарии 27

Отличная статья. Вы в какой именно сфере применяете web data mining?
В различных сферах. Например, у меня есть быстрые интерфейсы к форумам, слепки некоторых баз. Большинство подпадает либо под NDA либо под «просто не хочу афишировать». Ведь владельцы порой подобного не любят, меняют структуры сайта и все приходится делать заново.
НЛО прилетело и опубликовало эту надпись здесь
Полстатьи о том, как написать правильный сервис) Думаю, этому стоило б уделить отдельную статью — благо тема стоящая.
На самом деле я не пропагандирую написание своих сервисов. Легче использовать готовый хост.
А можно в этом месте подетальнее?
Я планировал просто про это написать, но идея примерно в следующем: вместо того чтобы писать свой сервис, мы пишем нечто вроде «плаг-ина» для уже существующего, обобщенного сервиса. Хосты бывают для разных целей — например для WCF или для NServiceBus. Хост может сам быть сервисом. Хостом также может выступать, например, IIS.
Спасибо, не встречал раньше таких оберток.
занимаюсь тем же самым. почему не используете обычный WebClient/WebRequest?
Когда есть соответствие между URL и контентом, использую.
а как «боретесь» с pagination которая сделана на asp.net с помощью postback? если не секрет
Эта ситуация очень много где, и я с ней не борюсь. Первое что я делаю — смотрю есть ли в QueryString параметр размера страницы. Если есть — ставлю значение 100500 чтобы получить все записи на одной странице. Если нет — делаю обход с использованием WatiN. Да, это медленно, иногда жутко медленно, но скрейпинг в любом случае нельзя воспринимать как realtime processing.
есть ли проблемы в выявлении уникальности страницы? (чтобы не грузить по несколько раз одну станицу)
например ссылки на первой станице
(1) 2 3 4 5 6 7 8 9 следующая
если щелкаем на 9 ую то картина
такая же, только девятка вместо единицы подсвечена
1 2 3 4 5 6 7 8 (9) следующая
нужно нажать «следующая» и увидеть
предыдущая (10) 11 12 13 14 15 16 17 18 19 следующая
причем для 1 и для 10 в параметре href стоит javasript:doPostBack('blabal$page1', '')
На самом деле порой проблем в 10 раз больше, особенно если вы например парсите какой-нибудь мощный чат-движок. В каждом случае проблема решается в индивидуальном порядке. Например, в случае повторений, у меня часто фигурирует такая структура как HashSet<T>, тем самым дупликаты не попадают в базу данных. Это кстате актуально когда нужно делать повторный обход уже посещенных в прошлом страниц – как например в случае с использованием поллинга.
Дмитрий! Очень понравилась верстка топика, особенно модные заголовки-картинки!

У меня есть вопрос о том, чем же вас в действительности не устраивает, например, объект WebBrowser (который можно как раз запускать в Single Thread и радоваться жизни). И кстати, могут ли эти библиотеки обрабатывать и исполнять javascript? это иногда действительно проблема!

Я сейчас занят решением схожей задачи, и вариант с server-side WebBrowser Object меня очень и очень радует.

P.S.: Минимальный ценник на SQL Server 2008 Standard ощутимо ниже, деталей не скажу из-за недостатка информации, но версия за 7500 — это одна из самых дорогих коробочных лицензий.
WatiN использует сам браузер, тем самым нет вообще никаких проблем ни с js ни с flash или любым другим плагином. Использование WebBrowser тоже вариант, конечно, хоть и весьма странный.

Для типичного заказа на подобные работы, стоимость движка базы данных равна 0 (нулю). Что касается SQL Server, можно с уверенностью утверждать что стоимость SQL Server в России не может быть сильно ниже чем RRP. Посмотрите на SoftLine – 215757 рублей = $7014.
Почему не воспользоваться HtmlWeb из состава HtmlAgilityPack для загрузки страницы?
В большинстве случаев нужно иметь возможность управлять браузером. Насколько я понимаю, HtmlWeb это обертка вокруг WebRequest?
Не знаю, код не смотрел, но подозреваю, что да. Просто страница грабится в одну строку, и сразу создаётся объект HtmlDocument. Просто исходя из вашего примера, я управления браузером не увидел, вот и предложил :) Вообще, я написал несколько парсеров на .Net, и ни разу браузером рулить было не надо. Поделитесь, когда это может быть нужно? Самый сложный парсер был для яндекса, там приходилось вручную качать странички через WebRequest и отправлять данные каптчи через POST. Но в общем-то, тот же Curl :)
Браузером нужно рулить когда URL не соответствует контенту один-к-одному. Например, paging через postback или ajax.

Вот живой пример: работа с банк-клиентами. Чтобы войти в банк-клиент, нужно сделать много телодвижений. Чтобы сделать перевод с одного счета на другой тоже нужно понажимать кнопочки.
Можно пробовать считать ответы Ajax напрямую, но в целом я понял о чём вы.
отличная статья и ссылки на пакеты

ps — тему опасную вы подняли, это руководство можно применить не только для скрейпинга
руководство

руководство кого/чего? :)
руководство = статья = мануал = tutorial

вы слишком долго жили _там_ :)
нда, что-то в голове замкнуло что де «злое руководство будет это использовать против нас» :) менталитет…
запустите firebug.
отследите запросы.
в основном там картинки, но есть и бинарная передача данных.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории