Comments 27
В различных сферах. Например, у меня есть быстрые интерфейсы к форумам, слепки некоторых баз. Большинство подпадает либо под NDA либо под «просто не хочу афишировать». Ведь владельцы порой подобного не любят, меняют структуры сайта и все приходится делать заново.
UFO landed and left these words here
Полстатьи о том, как написать правильный сервис) Думаю, этому стоило б уделить отдельную статью — благо тема стоящая.
На самом деле я не пропагандирую написание своих сервисов. Легче использовать готовый хост.
Я планировал просто про это написать, но идея примерно в следующем: вместо того чтобы писать свой сервис, мы пишем нечто вроде «плаг-ина» для уже существующего, обобщенного сервиса. Хосты бывают для разных целей — например для WCF или для NServiceBus. Хост может сам быть сервисом. Хостом также может выступать, например, IIS.
а как «боретесь» с 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.
отследите запросы.
в основном там картинки, но есть и бинарная передача данных.
Only those users with full accounts are able to leave comments. Log in, please.