Разбор HTML с VB.Net - PullRequest
       3

Разбор HTML с VB.Net

0 голосов
/ 25 декабря 2010

Кто-нибудь знает хороший способ парсинга HTML в VB.Net.

Я нашел решение где-то в сети, используя MSHTML.

Я попытался использовать его, и чтобы заставить его работать, мне пришлось добавить код в мой проект:

Public Enum HRESULT
    S_OK = 0
    S_FALSE = 1
    E_NOTIMPL = &H80004001
    E_INVALIDARG = &H80070057
    E_NOINTERFACE = &H80004002
    E_FAIL = &H80004005
    E_UNEXPECTED = &H8000FFFF
End Enum

<ComVisible(True), ComImport(), Guid("7FD52380-4E07-101B-AE2D-08002B2EC713"), _
    InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)> _
Public Interface IPersistStreamInit : Inherits IPersist
    Shadows Sub GetClassID(ByRef pClassID As Guid)
    <PreserveSig()> Function IsDirty() As Integer
    <PreserveSig()> Function Load(ByVal pstm As UCOMIStream) As HRESULT
    <PreserveSig()> Function Save(ByVal pstm As UCOMIStream, _
        <MarshalAs(UnmanagedType.Bool)> ByVal fClearDirty As Boolean) As HRESULT
    <PreserveSig()> Function GetSizeMax(<InAttribute(), Out(), _
    MarshalAs(UnmanagedType.U8)> ByRef pcbSize As Long) As HRESULT
    <PreserveSig()> Function InitNew() As HRESULT
End Interface

<ComVisible(True), ComImport(), Guid("0000010c-0000-0000-C000-000000000046"), _
    InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)> _
Public Interface IPersist
    Sub GetClassID(ByRef pClassID As Guid)
End Interface

Declare Function CreateStreamOnHGlobal Lib "ole32" (ByVal hGlobal As IntPtr, ByVal fDeleteOnRelease As Boolean, _
    ByRef ppstm As UCOMIStream) As Long
' Please note that i copied above IPersistStream definition from sp!ke. I owe him a drink ;). 

Конечный класс

А теперь я получаю устаревшие предупреждения:

Warning 1   'System.Runtime.InteropServices.UCOMIStream' is obsolete: 'Use System.Runtime.InteropServices.ComTypes.IStream instead. http://go.microsoft.com/fwlink/?linkid=14202'.

Мне не понравилось то, что мне пришлось использовать материал MSHTML (потому что я думаю, что IE также использует его, и мы все знаем, что IE отстой :)) и что мне пришлось добавить код, чтобы он работал. 1013 *

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

Существует ли другой (/ лучший) подход к разбору html-страниц в VB.Net.

По сути, я пытаюсь получить все ссылки (теги <a>) и встраивания (тег <object>) на страницу.

Заранее благодарим за помощь!

Ответы [ 3 ]

2 голосов
/ 25 декабря 2010

использование

Html Agility Pack.Его лучший там.Это можно сделать без браузера.

http://htmlagilitypack.codeplex.com/

2 голосов
/ 25 декабря 2010

Вы можете использовать HTML Agility Pack

0 голосов
/ 25 декабря 2010

В приложении WinForm вы можете создать объект WebBrowser и разрешить ему загружать страницу, после чего вы можете найти любое имя тега и данные по узлу dom.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...