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

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

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

Заранее спасибо!
  • Вопрос задан
  • 13887 просмотров
Решения вопроса 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.

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

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

Похожие вопросы