Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Парсинг HTML


Автор: soulcub 8.9.2010, 22:13
Есть задание, нужно написать прогу, которая будет отправлять в яндекс запрос, который введён в программе. Возвращать она должна 20 строк по парно в формате 

Ссылка
Краткое описание

Попытался сделать так, но дальше получаю HTML-код и не знаю что с ним делать, чтоб вытащить те строчки.

Код

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;

public class yandex {

    private String request;

    public yandex() {

        request = "наркотики"; /Например

        try {

            URL url = new URL("http://yandex.com/yandsearch?text=" + request);
            BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                StringBuffer temp = new StringBuffer(line);
                        System.out.println(line);
            }
            reader.close();
        } catch (IOException ex) {
            Logger.getLogger(yandex.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public static void main(String[] args) {
        new yandex();
    }
}


Также думал найти закономерности в самой странице яндекса и тупым перебором строчек найти то что нужно, но не вышло( Что подскажите?

Автор: MisterCleric 8.9.2010, 22:20
Привет.
Ану посмотри здесь:
http://java-source.net/open-source/html-parsers

Я в свое время взял для этого дела Cobra. Мне очень понравилось, так как там синтаксис сводиться к обработке документа в стиле JavaScript

Автор: soulcub 8.9.2010, 22:30
Спасибо) Сейчас попробую кобру эту) Самое плохое, что мне надо за сегодня разобраться и отправить код) Если что - напишу сюда ещё.

Автор: Nofate 8.9.2010, 22:50
Если речь идет о ссылках в выдаче,то выглядят они примерно так:

Код

<a class="agp" tabindex="2" href="http://exlibris.ng.ru/kids/2008-07-24/7_skazka.html" onmousedown="..." target="_blank">Хрюкотунчик, <b>Шебуршунчик</b> и Бурундунчик </a>


Можно:
1. Найти вручную подстроку <a class="agp", потом пропустить все символы до ближайшего >. Запомнить место. Найти ближайшую подстроку </a>. Получить подстроку между этими двумя позициями. повторять до конца файла.

2. Тоже самое, но с автоматикой smile Пройтись регэкспом. Что-то вроде  <a class="agp"*>{1}</a> . Как ими пользоваться смотрим тут: http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html

3. Отпарсить как XML при помощи SAX. Обрабатывать теги <a>, у которых атрибут class равен "agp" и выдергивать текст.

4. Отпарсить как XML при помощи DOM. Найти в дереве элементы <a>, у которых атрибут class равен "agp" и выдернуть текст.

На мой взгляд, для такой узкой задачи документ можно и не парсить и обойтись регэкспами. 

ЗЫ. Долго же я писал пост ))

Автор: soulcub 8.9.2010, 23:08
Согласен, в принципе.. Сам думал о том, чтоб просто вручную пройтись по коду, но меня остановила мысль.. Это ведь задания на приём на работу) Значит они ими хотят что-то проверить в моих знаниях) А тупо перебирать весь код.. Хотя.. Парсеры ведь так и делают.. Короче всё) Решился) Сделаю свой парсер именно для такой цели)


Nofate, спасибо за толчок хДД

Автор: soulcub 9.9.2010, 00:28
Очень странно, почему-то в коде, который принимает моя прога нету комментариев к ссылкам оО Хотя в браузере они есть. В проге они просто пропускаются. Что это может быть?

Автор: soulcub 9.9.2010, 14:01
Всё нашёл. Во всём разобрался, всё ок) Просто в коде затупил)

Автор: Nofate 9.9.2010, 20:07
Ну как задание-то, приняли?

Автор: soulcub 10.9.2010, 18:37
Вчера отправил) Говорили, что нужно дня 2-3, чтоб проверить ибо работы много. Ждём ответа)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)