1

Тема: VBScript: исследование веб-сайтов с помощью компонента Chilkat Spider

Бесплатный COM-сервер Chilkat Spider предоставляет функционал для исследования веб-сайтов. Дистрибутив (msi-инсталлятор) имеет размер около 1 Мб. Документацию можно найти здесь. Примеры можно найти здесь.

Возможности:
* Обход веб-сайта с учётом Robots.txt;
* Сбор внешних ссылок;
* Кеширование страниц для будущих обходов;
* Получение мета-информации страниц;
* Поддержка HTTPS;
* Исключение URL по указанным шаблонам;
* Исключение внешних ссылок по указанным шаблонам;
* Возможность задания тайм-аутов, счётчика и лимита страниц;
* Задание максимального размера URL для избежания зацикливания;
* Задание максимального размера страницы;

Простейший пример обхода. Скрипт обходит и выводит в консоль все URL, отвечающие шаблону *.htm*, начиная со страницы forum.script-coding.com/rules.html, в пределах домена script-coding.com. Найденные внешние ссылки, соответствующие тому же шаблону, также выводятся:

Set oSpider = CreateObject("Chilkat.Spider")
' инициализация; сброс настроек, сделанных методами
' AddAvoidOutboundLinkPattern, AddAvoidPattern и AddMustMatchPattern,
' если такие настройки были, и установка свойства Domain:
oSpider.Initialize "script-coding.com"
WScript.Echo "Домен: " & oSpider.Domain
' отправная точка исследования (фактически - добавление URL для обхода):
oSpider.AddUnspidered "http://forum.script-coding.com/rules.html"
' ограничивающий шаблон (действует и на внешние ссылки):
oSpider.AddMustMatchPattern "*.htm*"
Do While True
    ' получить очередной URL и пополнить внутренний список ссылок для обхода:
    success = oSpider.CrawlNext()
    If success = 1 Then
        ' очередной найденный URL:
        WScript.Echo oSpider.LastUrl & " (осталось URL - " & oSpider.NumUnspidered & ")"
    Else
        If oSpider.NumUnspidered = 0 Then ' количество необойдённых URL
            WScript.Echo "Обход завершён."
        Else
            WScript.Echo spider.LastErrorText ' последняя произошедшая ошибка
        End If
        Exit Do
    End If
    oSpider.SleepMs 1000 ' пауза в миллисекундах
Loop
WScript.Echo "Внешние ссылки:"
For i = 0 To oSpider.NumOutboundLinks - 1
    Wscript.Echo oSpider.GetOutboundLink(i)
Next
Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

2

Re: VBScript: исследование веб-сайтов с помощью компонента Chilkat Spider

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

Set oSpider = CreateObject("Chilkat.Spider")
oSpider.Initialize "elevel.ru"
oSpider.AddUnspidered "http://www.elevel.ru/"
suc = oSpider.CrawlNext()
WScript.Echo oSpider.LastUrl
WScript.Echo oSpider.GetDomain(oSpider.LastUrl) ' получение домена из URL
WScript.Echo oSpider.GetBaseDomain(oSpider.GetDomain(oSpider.LastUrl)) ' получение корневого домена
WScript.Echo "title:"
WScript.Echo oSpider.LastHtmlTitle ' заголовок страницы
WScript.Echo "description:"
WScript.Echo oSpider.LastHtmlDescription ' description страницы
WScript.Echo "keywords:"
WScript.Echo oSpider.LastHtmlKeywords ' keywords страницы
WScript.Echo
WScript.Echo oSpider.FetchRobotsText ' содержимое robots.txt
WScript.Echo
' пример получения "canonicalized" URL для исключения дубликатов при сложных обходах:
WScript.Echo oSpider.CanonicalizeUrl _
    ("http://username:password@www.chilkatsoft.com/purchase2.asp#buyZip")

Пример задания исключающих шаблонов URL:

Set oSpider = CreateObject("Chilkat.Spider")
oSpider.Initialize "elevel.ru"
oSpider.AddUnspidered "http://www.elevel.ru"
' исключить URL по маске:
oSpider.AddAvoidPattern "*iNavId*"
oSpider.AddAvoidPattern "*iContentId*"
' см. также метод AddAvoidOutboundLinkPattern в документации
Do While True
    success = oSpider.CrawlNext()
    If success = 1 Then
        WScript.Echo oSpider.LastUrl & " (осталось URL - " & oSpider.NumUnspidered & ")"
    Else
        If oSpider.NumUnspidered = 0 Then ' количество необойдённых URL
            WScript.Echo "Обход завершён."
        Else
            WScript.Echo spider.LastErrorText ' последняя произошедшая ошибка
        End If
        Exit Do
    End If
    oSpider.SleepMs 1000 ' пауза в миллисекундах
Loop

Пример использования кеша:

Set oSpider = CreateObject("Chilkat.Spider")
oSpider.CacheDir = "c:/temp/_cache" ' каталог будет создан, если не существует
oSpider.FetchFromCache = 1 ' извлекать страницы из кеша, если возможно
oSpider.UpdateCache = 1 ' пополнять кеш
oSpider.Initialize "www.chilkatsoft.com"
oSpider.AddUnspidered "http://www.chilkatsoft.com/"
Do While True
    success = oSpider.CrawlNext()
    If success = 1 Then
        WScript.Echo oSpider.LastUrl & " (осталось URL - " & oSpider.NumUnspidered & ")"
    Else
        If oSpider.NumUnspidered = 0 Then 
            WScript.Echo "Обход завершён."
        Else
            WScript.Echo spider.LastErrorText
        End If
        Exit Do
    End If
    If oSpider.LastFromCache <> 1 Then
        ' пауза нужна, только если страница была извлечена НЕ из кеша:
        oSpider.SleepMs 1000
    End If
Loop
Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.