Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Анализ сайта, например название страницы 
:(
    Опции темы
Ivan Kolesnikov
Дата 6.6.2006, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 9.3.2005
Где: г. Новокузнецк

Репутация: нет
Всего: 6



Привет, анализируя содержимое, можно жестко привязаться к дизайну сайта (просто выделив нужный код и изменив участки которые меняются), но тогда при небольших изменениях программа уже не будет ничего находить, поэтому лучше привязываться только к общей структуре таблиц.

То что тебе нужно, можно найти например следующим регекспом:
Код

Pattern headPattern = Pattern.compile("<tr[^>]*>.*?<font[^>]*>\\s*(.*?)\\s*</font>.*?(?:<td.*?){3}<font[^>]*>\\s*(.*?)\\s*</font>",
  Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
Matcher headMatcher = headPattern.matcher(strBuffer);
while (headMatcher.find())
  System.out.println(headMatcher.group(1) + " - " + headMatcher.group(2));

Подсовываешь ему все содержимое полученной страницы и я думаю он отлично с этим справится, хотя возможно необходимо будет выделить тот кусок, что ты привел выше.

Теперь немножко что этот регексп делает smile, раньше я жутко боялся таких вещей, но работая с Perl грех не пользоваться таким мощным инструментом, вот и научился, и перестал боятся. Я первый раз использовал регекспы на Java, и оказывается они практически неотличаются, покрайней мере твой пример выглядит абсолютно также.

Так вот:
  • ищем "<tr";
  • пропускам все символы, кроме ">" ([] - обозначают набор символов, а если вначале стоит ^ - то все кроме этих символов);
  • пропускам как можно меньше любых символов (знак ? - уменьшает жадность), пока не встретится "<font";
  • доходим до ">";
  • пропускам пробельные символы (\s);
  • получаем номер банкомата;
  • пробелы нам не нужны;
  • граница банкомата тег "</font>";
  • далее можно пропустить несколько символов, до "<td" (опять знак вопроса, а это значит, что до первого "<td")
  • нужно пропустить не один, а 3 тега "<td", я ненавижу дублирование поэтому, сгруппировал эти символы (круглые скобки), а так как результат нам не интересен, то поставил знак "?:";
  • также как и номер банкомата проверяем его статус.
Вот и все, насчет чтения из файла, я думаю на форуме полно таких вопросов, поищи лучше.

Про то как выводить все это в графическом виде, помочь тебе пока не могу (сам только взялся за GUI).

Пока. 

P.S. Извини, я что-то маленько не то тебе подсказал smile, если тебе нужны не все банкоматы, а только конкретные (из списка), то можно или динамически генерировать регулярное выражение (заменить в нем первые круглые скобки на искомый банкомат) или просматривать все, а реагировать только на необходимые. Как оптимальнее сказать тебе не могу, так как Java еще не долго изучаю, попробуй сравни. 

Это сообщение отредактировал(а) Ivan Kolesnikov - 6.6.2006, 13:50
--------------------
PM MAIL ICQ   Вверх
Berliner
Дата 7.6.2006, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: 1
Всего: 2



Спасиб за код, но тут такой вопрос мне бы хотелось чтобы анализ HTML страницы проходил  по названию банкоматов(названия у меня забиты в массиве данных). например, банкомат уже  есть на сайте,  но он еще не конфигурирован, то есть связь постоянно N.   


Цитата

Извини, я что-то маленько не то тебе подсказал smile, если тебе нужны не все банкоматы, а только конкретные (из списка), то можно или динамически генерировать регулярное выражение (заменить в нем первые круглые скобки на искомый банкомат) или просматривать все, а реагировать только на необходимые. Как оптимальнее сказать тебе не могу, так как Java еще не долго изучаю, попробуй сравни. 


Для меня этот вариант более подходящий. Помогите с кодом пожалуста.  

Это сообщение отредактировал(а) Berliner - 7.6.2006, 10:38
PM   Вверх
Berliner
Дата 8.6.2006, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: 1
Всего: 2



иожет кто нить знает? 
PM   Вверх
Ivan Kolesnikov
Дата 8.6.2006, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 9.3.2005
Где: г. Новокузнецк

Репутация: нет
Всего: 6



Привет!

Вариант 1-й (получаем все, но сохраняем только важные для нас):
Код

String[] items = {"ATM00071", "ATM00072", "ATM00073"};
        
//Сортируем чтобы работал бинарный поиск
Arrays.sort(items);
Pattern headPattern = Pattern.compile("<tr[^>]*>.*?<font[^>]*>\\s*(.*?)\\s*</font>.*?(?:<td.*?){3}<font[^>]*>\\s*(.*?)\\s*</font>",
  Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
Matcher headMatcher = headPattern.matcher(strBuffer);
while (headMatcher.find())
  if (Arrays.binarySearch(items, headMatcher.group(1))>-1)
    System.out.println(headMatcher.group(1) + " - " + headMatcher.group(2));


Вариант 2-й:
Изменяем динамически регулярное выражение:
Код

String[] items = {"ATM00071", "ATM00072", "ATM00073"};
Pattern p;
Matcher m;
for (int i=0; i<items.length; i++) {
  p = Pattern.compile(items[i] + ".*?(?:<td.*?){3}<font[^>]*>\\s*(.*?)\\s*</font>",
    Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
  m = p.matcher(strBuffer);
  System.out.print(items[i] + " - ");
  if (m.find())
    System.out.println(m.group(1));
  else
    System.out.println("NO");
};


Не в обиду, почитай философию Java, разберись с ней хорошенько, и не нужно будет все вопросы только на форуме решать smile 
--------------------
PM MAIL ICQ   Вверх
Berliner
Дата 20.9.2006, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: 1
Всего: 2



Спасиб второй вариант классно подходит

Код

String[] items = {"ATM00071", "ATM00072", "ATM00073"};
Pattern p;
Matcher m;
for (int i=0; i<items.length; i++) {
  p = Pattern.compile(items[i] + ".*?(?:<td.*?){3}<font[^>]*>\\s*(.*?)\\s*</font>",
    Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
  m = p.matcher(strBuffer);
  System.out.print(items[i] + " - ");
  if (m.find())
    System.out.println(m.group(1));
  else
    System.out.println("NO");
};


Только что то неправильноь ищет не находит букву N ошибка в регулярном выражеинии может кто нитьзнает ячто подправить? Ниже часть примера страницы 

Эта програмка должна анализировать сайт на сайте отображается состояние cash point-ов, если ATM не работает то высвечивется N в определееном месте. Каждый банкомат имеет свое имя. (как "подключиться к сайту" я знаю). 
сложности следующие: 
мне нужно чтобы найдя банкомат(по имени) с помощью регялярного выражения(банкомат по имени я нахожу)

 определить есть ли связь буква Y или N(проанализировать текст на несколько строк ниже <DIV align=left><FONT size=-1>N</FONT></DIV></TD>).
Если есть(Y) то ищем другой банкомат и проверяем связь. Если Нет связи высвечиваем сообщение нету связи и дальше ищем, пока не просомтрим все банкоматы у меня не получается реализовать этот алгоритм.
Код
<TD width="10%"><A title="Посмотреть детально" 
            href="http://192.168.64.5:7777/atmcity/jsp/monitor/detail.jsp?PSSWD3=H2605&amp;T_ID=ATM00071"><FONT 
а вот номер ATM00071            size=-1>ATM00071 </FONT></A></TD>
          <TD width="12%" bgColor=#ffff00><FONT size=-1>Внимание:есть 
            ошибки</FONT></TD>
          <TD width="19%"><FONT size=-1>...</FONT></TD>
          <TD width="3%" bgColor=#80ff80>
вот тут N значит не работает ATM00071   <DIV align=left><FONT size=-1>N</FONT></DIV></TD>
          <TD width="12%"><FONT size=-1><A 
            href="http://192.168.64.5:7777/atmcity/jsp/monitor/last_dsps.jsp?PSSWD=122042">Последняя 
            выдача </A></FONT></TD>
          <TD width="8%" bgColor=#ffff00>
            <DIV align=center><FONT size=-1>2</FONT></DIV></TD></TR>
        <TR bgColor=#ffffff>
          <TD width="10%"><A title="Посмотреть детально" 
            href="http://192.168.64.5:7777/atmcity/jsp/monitor/detail.jsp?PSSWD3=H2605&amp;T_ID=ATM00072"><FONT 
            size=-1>ATM00072 </FONT></A></TD>
          <TD width="12%" bgColor=#ffffff><FONT size=-1>Внимание</FONT></TD>
          <TD width="19%"><FONT size=-1>...</FONT></TD>
          <TD width="3%" bgColor=#80ff80>
            <DIV align=left><FONT size=-1>Y</FONT></DIV></TD>
          <TD width="12%"><FONT size=-1><A 
            href="http://192.168.64.5:7777/atmcity/jsp/monitor/last_dsps.jsp?PSSWD=122048">Последняя 
            выдача </A></FONT></TD>
          <TD width="8%" bgColor=#80ff80>
            <DIV align=center><FONT size=-1>0</FONT></DIV></TD></TR>
        <TR bgColor=#ffffff>
          <TD width="10%"><A title="Посмотреть детально" 
            href="http://192.168.64.5:7777/atmcity/jsp/monitor/detail.jsp?PSSWD3=H2605&amp;T_ID=ATM00073"><FONT 

PM   Вверх
LSD
Дата 22.9.2006, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Модератор: разделил темы, новая тема тут.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0781 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.