выдирание ссылок из html-страницы

Тема в разделе "WASM.A&O", создана пользователем valix7, 31 мар 2007.

  1. valix7

    valix7 New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    143
    Привет!
    Интересует сабж... есть ли готовые алгоритмы или придется писать самому )) ?
     
  2. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    привет
    вот мож почитать там это используется, ещё можно про регулярные выражения почитать тут на сайте недавно пробегала статья W[4Fh]LF'а
     
  3. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Тебе нужен алгоритм копировани строки? :)
     
  4. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    Алгоритмы есть: запуск любимого браузера->набор в строке адреса "google.ru"->введение запроса поиска->отбор нужного
    :)
     
  5. valix7

    valix7 New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    143
    все-таки написал сам. правда сыроват чуть, но для начала сойдет.
    Кому интересно:
    Код (Text):
    1. #include "stdafx.h"
    2. #include <windows.h>
    3.  
    4. char buff[0xffff * 16];
    5. int main(int argc, char* argv[])
    6. {
    7.     char buff2[1024];
    8.     int b_sk;   int l_t;    int b_h;    int b_e;    int b_s;
    9.     long i; long hb;    long hbe; long j;   long writ;  long k;
    10.     HANDLE hfile;
    11.     memset(buff, 0, sizeof(buff));
    12.     hfile = CreateFile("c:/b.html", GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    13.     ReadFile(hfile, (char*)buff, sizeof(buff), (LPDWORD)&writ, 0);
    14.     CloseHandle(hfile);
    15.     l_t = 0;    b_sk = 0;   b_h = 0;    b_e = 0; b_s = 0;    k = strlen(buff);
    16.  
    17.     for(i=0;i < k;i++){
    18.         if(l_t && buff[i] == '"'){
    19.             if(b_sk && b_h)hbe = i;
    20.             if(!b_sk && (buff[i-1]!= ' ' || buff[i-1]!= '\10' || buff[i-1]!= '\13' ))b_sk =1;
    21.             b_sk = 1 - b_sk;    continue;
    22.         }
    23.         if(buff[i] == '>' && !b_sk){
    24.             if(b_h){
    25.                 b_h = 0; b_e = 0;
    26.                 memset(buff2, 0, sizeof(buff2));
    27.                 if(b_s){j = i - hb;}else{j = hbe - hb;}
    28.                 strncpy(buff2, (char*)buff + hb, j); printf("%s\n", buff2);
    29.             }
    30.             l_t=0;  continue;
    31.         }  
    32.         if(b_e && !b_sk){
    33.             if(buff[i] == ' '){if(b_s){hbe = i;b_s=0;}}else{b_s = 1;}   continue;
    34.         }
    35.  
    36.         if(buff[i] == '<' && !b_sk){l_t=1; continue;}
    37.         if(buff[i] == '=' && !b_e && l_t && !b_sk && b_h){;hb = i;b_e=1;continue;};
    38.         if(!b_h && l_t && !b_sk  && (buff[i-1]==' ' || buff[i-1]=='"' || buff[i-1]==10 || buff[i-1]==13) && ((buff[i] == 'H' || buff[i] == 'h') && (buff[i + 1] == 'R' || buff[i+1] == 'r') && (buff[i+2] == 'E' || buff[i+2] == 'e') && (buff[i] == 'F' || buff[i+3] == 'f') && (buff[i+4] == ' ' || buff[i + 4] == '=' )) ){;i=i+3;b_h=1;continue;}
    39.     }
    40.  
    41.     return 0;
    42. }
     
  6. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    кстати, ты случаем не спам бота мастыришь по сборке урлосов:)))??? мне лично спамеры оскомину большую набили тысячу адресов, а то и более засунул в фильтр, а с ними усе сладу никакого. вот так и задаешься весьма риторическим вопросом: "когда сему безобразию конец придёт":)))
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Одна регулярка всего нужна.
     
  8. valix7

    valix7 New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    143
    )))) нет, мне надо написать что-то вроде offline-browser'a....
     
  9. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    есть куча опен сорсных бравзеров, хтмл редакторов - глянь на их код: тебе скорей всего и выдумывать ничего не придёться.
     
  10. valix7

    valix7 New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    143
    2UbIvItS, спасибо за совет... я уже все сам написал...
    з.ы. чуть исправленная версия алгоритма который я выложил выше:
    Код (Text):
    1. #include <windows.h>
    2.  
    3. char buff[0xffff * 160];
    4. int main(int argc, char* argv[])
    5. {
    6.     char buff2[1024];
    7.     int b_sk; int b_s2; int l_t; int b_h;   int b_e;    int b_s;
    8.     long i; long hb;    long hbe; long j;   long writ;  long k;
    9.     HANDLE hfile;
    10.     memset(buff, 0, sizeof(buff));
    11.     hfile = CreateFile("c:/a.html", GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    12.     ReadFile(hfile, (char*)buff, sizeof(buff), (LPDWORD)&writ, 0);
    13.     CloseHandle(hfile);
    14.     writ = 0;
    15.     l_t = 0;    b_sk = 0;   b_h = 0;    b_e = 0; b_s = 0;    k = strlen(buff);
    16.     hbe =  0; b_s2 = 0; hb = 0;
    17.     for(i=0;i < k;i++){
    18.         if(l_t && buff[i] == '"'){
    19.             if(b_sk && !hbe && b_e){hbe = i;}
    20.             if(!b_sk && b_e && !hb){hb = i +1; }
    21.             if(!b_sk && (buff[i-1]!='=' && buff[i-1]!= ' ' && buff[i-1]!= 10 && buff[i-1]!= 13 ))b_sk =1;
    22.             b_sk = 1 - b_sk;    continue;
    23.         }
    24.         if(buff[i] == '>' && !b_sk){
    25.             if(b_h){
    26.                 memset(buff2, 0, sizeof(buff2));
    27.                 if(b_s){j = i - hb;}else{j = hbe - hb;}
    28.                 strncpy(buff2, (char*)buff + hb, j);    printf("<%s>\n", buff2);       
    29.                 hbe = 0; hb = 0;    b_s = 0; b_s2 = 0; b_h = 0; b_e = 0;
    30.                 writ++;
    31.             }
    32.             l_t=0;  continue;
    33.         }  
    34.         if(b_e && !b_sk){
    35.             if(buff[i] == ' ' && b_s && !hbe){hbe = i; b_s=0; continue;}
    36.             if(buff[i]!= ' ' && buff[i]!= '"' && !b_s && !hb){b_s = 1; hb = i;continue;}
    37.         }
    38.         if(buff[i] == '<' && !b_sk){l_t=1; continue;}
    39.         if(buff[i] == '=' && !b_e && l_t && !b_sk && b_h){b_e=1;continue;};
    40.         if(!b_h && l_t && !b_sk  && (buff[i-1]==' ' || buff[i-1]=='"' || buff[i-1]==10 || buff[i-1]==13) && ((buff[i] == 'H' || buff[i] == 'h') && (buff[i + 1] == 'R' || buff[i+1] == 'r') && (buff[i+2] == 'E' || buff[i+2] == 'e') && (buff[i] == 'F' || buff[i+3] == 'f') && (buff[i+4] == ' ' || buff[i + 4] == '=' )) ){;i=i+3;b_h=1;continue;}
    41.     }
    42.     printf("\n%d\n", writ);
    43.     return 0;
    44. }
     
  11. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    Ладно, поверим наслово, что работает:)
     
  12. valix7

    valix7 New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    143
    хз... проверь в реале что работает :))
     
  13. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    молодец, что настрокал вот тебе кульный сайт с сырцами (http://www.codeproject.com)- мож пригодиться тебе.
    ---------------------------------------------------------------------------------------------------------
    кстати, вопрос не по теме у кого нить аська пашет(???) - мой qip не фига к сервачу не коннектиться и на сайт их выйти не могу.
    ----------------------------------------------------------------------------------------------------------
     
  14. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    На cnews.ru прочитал в чем дело - прям подарок на 1 апреля:))
     
  15. gazlan

    gazlan Member

    Публикаций:
    0
    Регистрация:
    22 май 2005
    Сообщения:
    414
    -*- LinkGrabber 1.2 * Copyright (c) Aleph 2004 -*-
    Just to grab WEB links from some sources

    Эташ так и не прицепился.