Простенькое веб приложение-парсер

Приветствую. Понадобилось написать приложение, целью которого будет парсинг некого сайта, фасовка его содержимого в бд и раздача этой самой бд при помощи api. Хотелось бы реализовать все на джаве, но если есть идеи лучше и проще, то с радостью прислушаюсь. Основной приоритет данной затеи — скорость и надежность.

Если останавливать выбор на джаве, то хотелось бы элегантное решение, без энт скриптов и огромных xml. С веб-джавой знаком весьма посредственно, буду рад ссылке на хорошей туториал!

Заранее спасибо!
  • Вопрос задан
  • 13881 просмотр
Решения вопроса 1
taliban
@taliban
php программист
Лучше и проще делать на том, что лушче всего знаешь, но если хочется на джаве «потому что хочу ее узнать поближе», то делайте на джаве и не обращайре внимания на другие советы (иначе читай сначала).
Ответ написан
Пригласить эксперта
Ответы на вопрос 8
@egorinsk
Бросайте яву. На PHP парсер пишется в 10 строк: curl_init(), curl_exec(), preg_match_all(), mysql_connect(), mysql_select_db(), mysql_query(). Параметры функций подставьте сами, исходя из условий вашей задачи.
Ответ написан
serso
@serso
Если вы хотите нормальное решение — это Spring MVC+Web, в качестве ORM — Hibernate, OpenJPA или что-то своё.

Какой именно API вам нужно — ajax, web services? Для первого случая — решение — просто написать контроллер в Spring'e, для второго — Jax WS или что-нибудь подобное.

Администрирование — Spring Secutiry будет скорее всего достаточно, если нет — Apache Shiro можно глянуть.

Веб интерфейс — тут что угодно, начиная от JSP, заканчивая Ext GWT, хотя вам как я понимаю это не нужно.

Ссылки:
Куча туториалов на оф сайте www.springsource.org/tutorials
www.springbyexample.org/

PS Хостинг на Java будет дороже, если конечно у вас нет своего виртуального/выделенного сервера…
Ответ написан
@vimvim
Обратите внимание на web-harvest.sourceforge.net/
Это Java приложение со своим небольшим функциональным языком.
Вот как выглядит пример парсинга flickr:
<?xml version="1.0" encoding="UTF-8"?>
 
<config>
    <include path="functions.xml"/>
    
    <var-def name="tags" overwrite="false">art</var-def>
    <var-def name="num" overwrite="false">1</var-def>
    
    <loop index="i" item="url">
        <list>
            <var-def name="imagelinks">    
                <call name="download-multipage-list">
                    <call-param name="pageUrl">
                          <template>http://www.flickr.com/search/?q=${tags}&m=tags</template>
                    </call-param>
                    <call-param name="nextXPath">//a[contains(., 'Next')]/@href</call-param>
                    <call-param name="itemXPath">//img[@class='pc_img']/@src</call-param>
                    <call-param name="maxloops"><template>${num}</template></call-param>
                </call>
            </var-def>
        </list>
        <body>
            <empty>
                <file action="write" path='flickr/${tags.toString().replaceAll(" ", "")}/${i}.jpg' type="binary">
                    <http url='${url.toString().replaceFirst("_m.jpg", ".jpg?v=0")}'/>
                </file>
            </empty>
        </body>
    </loop>
    
</config>
Ответ написан
Комментировать
ophiuhus
@ophiuhus
хотелось бы элегантное решение, без энт скриптов и огромных xml

После этого можно было не уточнять
С веб-джавой знаком весьма посредственно
Ответ написан
butteff
@butteff
Раз в тысячу лет заправляю свитер в носки
Я всегда парсю с помощью simple html dom parser
Плюсы в том, что нужный элемент выбирается по принципу селекторов в jQuery
Минусы — php. Но т.к. я его знаю лучше всего, для меня это плюс.

Не знаю, пригодиться ли Вам, но надеюсь.
Ответ написан
@tsegorah
парсить html можно руками тем же саксом, или можете попробовать какую-то из билиотек по ссылке
тут

как написали выше, для работы с базой данных подойдет любой jpa, тот же Hibernate
для rest интерфейса сторонним приложениям попробуйте библиотеку jersey

если вам необходим что-то небольшое, то рекомендую обратить внимание сначала на стандартные вещи, которые все это умеют, а потом уже на отдельные фреймворки
Ответ написан
Комментировать
Snowindy
@Snowindy
До создания сайта.
1. Создаем структуру базы.
2. Парсим содержимое исходного сайта, используя клинер грязных html-тэгов (нужен при некорректной разметке исходного сайта), записываем в базу.

Создание сайта:
1. Используем фреймворк Grails (довольно простой, без xml-конфигов и т.п., но мощный) для генерации вьюшек, вычитки данных из базы.
2. Сайт деплоится на хостинг, туда же переливается база.
Ответ написан
FanKiLL
@FanKiLL
Судя по тегу, вы хотите парсить хабру, личинг это плохо:)
Можете использовать jsoup.org для парсинга сайта, очень удобная библиотека, можно брать элементы по css классам как вариант, как в jquery.
Можете создать просто parser.jar который по крону будет парсить сайт и заносить в базу данные.

Для api без всяких xml конфингов я бы предложил использовать jersey.java.net собсно который будет забирать данные из базы и отдавать их наружу в виде json/xml Всё очень просто, например class Post с мeтодом getID(int id) вы можете замапить на domen.com/post/getid/1 причём отдавать наружу можете как xml так и json смотря какой Content-Type укажет в заголовках потребитель вашего api.

Удачи. Если, что пишите, помогу чем смогу.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект
10 мая 2024, в 23:33
2500 руб./за проект