Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: РегЭксп Добавлено: 07.10.04 17:01  

Автор вопроса:  Павел | Web-сайт: www.vbnet.ru | ICQ: 326066673 
Есть регэксп для выдирания из HTML ссылок:

(<a[^>]+href(\s)*=(\s)*((""(?<url>[^""]*)"")|('(?<url>[^']*)')|(?<url>[^\s>]*)))

Надо сделать, чтобы это не считалось ссылкой, если находится внутри
тэгов <Script></Script>.
Как это сделать?


И сюда же, в тему: есть ли какие-нть парсеры HTML, чтоб не сильно
ресурсоемкие были, и могли вот так работать:

- найти все тэги <a> в документе
- в цикле для каждого из них найти позицию и длину значения атрибута
href в документе

Желательно либо стандартный (имеющийся в поставке Win 2k3 или .Net
Fw), либо в виде .Net-библиотеки.

MS HTML это умеет?

Ответить

  Ответы Всего ответов: 10  

Номер ответа: 1
Автор ответа:
 dNW



Вопросов: 30
Ответов: 683
 Профиль | | #1 Добавлено: 07.10.04 17:29
1. Наверное придется искать закрывающий </script> вниз от тега <a>

2. Простой перебор с поиском InStr(n,html,"<a";) и InStr(n,html,"href";)

Ответить

Номер ответа: 2
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #2
Добавлено: 07.10.04 17:34
Нет, мне такая мутотень не нужна...
Есть уже отлаженная функция по работе со ссылками, к ней только разные
регэкспы из массива подставляются... Поэтому менять функцию я не буду,
иначе для каждого усовершенствования придется наворачивать горы
кода...
Все это можно сделать с помощью регулярных выражений, вопрос только в
том, как именно :(

Ответить

Номер ответа: 3
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #3 Добавлено: 07.10.04 18:10
Вот мутотень без регэкспов, но с MS HTML:

Private Sub Form_Load()
    WebBrowser1.Navigate "www.yandex.ru"
End Sub

Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    
    ;Dim webDoc As HTMLDocument
    ;Dim docHTML As String
    ;Dim numAtags As Integer, i As Integer
    ;Dim ARaw As String ' << полное ("outer";) значение тэга A в "сыром" виде (со всеми "&amp;" и т.п.)
    
    ' Те величины, о которых ты спрашивал:
    ;Dim hrefValue As String ' << нормализованное значение тэга HREF - т.е. уже без всяких "&amp;" и т.п.
    ;Dim hrefLength As Long ' << длина тэга HREF
    ;Dim hrefPos As Long ' << позиция тэга HREF
    
    Set webDoc = WebBrowser1.Document
    
    docHTML = webDoc.All.tags("HTML";)(0).outerHTML
    numAtags = webDoc.All.tags("A";).length
    
    For i = 0 To numAtags - 1
        hrefValue = webDoc.All.tags("A";)(i).getAttribute("HREF";)
        If Right$(hrefValue, 1) = "/" Then hrefValue = Left$(hrefValue, Len(hrefValue) - 1)
        
        hrefLength = Len(hrefValue)
        
        ARaw = webDoc.All.tags("A";)(i).outerHTML
        hrefPos = InStr(1, docHTML, ARaw, vbTextCompare)
        
        ;Debug.Print hrefValue, hrefLength, hrefPos
    Next
    
    Set webDoc = Nothing
    
End Sub

По-моему, это не очень сложно...

Ответить

Номер ответа: 4
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #4 Добавлено: 07.10.04 18:11
А WebBrowser не пойдет?
document.links - коллекция полнных (не относительных) ссылок с закачанной
страницы


Ответить

Номер ответа: 5
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #5
Добавлено: 08.10.04 08:38
Огромное спасибо to Commanche, именно MS HTML я и воспользуюсь.

Ответить

Номер ответа: 6
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #6
Добавлено: 08.10.04 12:27
К сожалению, MSHTML мне не подошел.
Он заточен под использование в WebBrowser, и пытается визуализировать
и исполнять документ. А это мне не подходит из-за соображений
производительности и безопасности.
К тому же, если он натыкается на ошибки в скриптах, то выдает свое
окошко об ошибке, которое стандартными методами подавить не удается.
В общем, MSHTML - полная лажа.

Мне бы чистый HTML-парсер, без всяких наворотов...

Ответить

Номер ответа: 7
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #7 Добавлено: 08.10.04 13:24
Дак а WinSock разве страницу закачать не может? Через 80 порт-то?
Или его из ASP.Net не подключить?

Ответить

Номер ответа: 8
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #8 Добавлено: 09.10.04 00:48
На самом деле, всё прекрасно реализуется и без ЭУ WebBrowser. У объекта HTMLDocument есть чудный метод: createDocumentFromUrl. Я в том примере использовал WebBrowser для простоты и наглядности - чтоб код примера можно было быстро "закопипэйстить" из форума в бэйсик (пардон за дурацкий сленг).

В общем, MSHTML - полная лажа


Не могу согласиться. Это как в старой рекламе: "Не люблю я этих кошек" - "Да ты просто не умеешь их готовить". :-))

Ответить

Номер ответа: 9
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #9
Добавлено: 09.10.04 11:32
Что такое WinSock - знаю смутно, зато хорошо знаком с
System.Net.Socket :)

А какое это вообще имеет отношение к теме?

Ответить

Номер ответа: 10
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #10
Добавлено: 09.10.04 11:39
MS HTML вообще тесно интегрирован с WebBrowser, иначе бы не
встречались бы куча методов, типичных для браузера IE: scrollto,
scroll, свойства вроде location и т.д.
Кроме того, он вроде бы будет пытаться подгружать из сети файлы,
ссылки на которые есть в документе, хотя не уверен.
И почему-то при нахождении ошибок в синтаксисе клиентских скриптов он
выбрасывает свой собственный MsgBox с предложением отладки, отменить
показ которого стандартными средствами нельзя.
В общем, от своего мнения я не отказываюсь :)

Проблему решил проще: нашел самодельный более-менее приличный
HTML-парсер с исходниками на C#.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам