Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] скрипт, который брал бы урл из переменной и сохралял исходный код веб страницы

Ответить
Настройки темы
CMD/BAT - [решено] скрипт, который брал бы урл из переменной и сохралял исходный код веб страницы

Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


Возможно создать такой скрипт, который брал бы урл из переменной и сохралял исходный код веб страницы в файл?

Отправлено: 23:36, 13-11-2011

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


campbell, я же Вас спрашивал… Пробуйте (WSH):
Код: Выделить весь код
Option Explicit

Dim strUrl
Dim strOriginalCharset

Dim objHTMLDocument
Dim objHTMLHeaderElement
Dim objHTMLElement

Dim strCity
Dim strDegree
Dim strBar
Dim strWind
Dim strHum


strUrl             = "http://www.gismeteo.ru/city/daily/4368/"
strOriginalCharset = "UTF-8"

Set objHTMLDocument = GetDocumentFromURL(strUrl, strOriginalCharset)


For Each objHTMLHeaderElement In objHTMLDocument.getElementsByTagName("h3")
	If objHTMLHeaderElement.className = "typeC" Then
		strCity = objHTMLHeaderElement.firstChild.nodeValue
		
		Set objHTMLElement = objHTMLHeaderElement.nextSibling.nextSibling.nextSibling
		strDegree = objHTMLElement.firstChild.nodeValue
		
		Set objHTMLElement = objHTMLElement.nextSibling
		strBar = objHTMLElement.title & " " & objHTMLElement.firstChild.nodeValue & " " & objHTMLElement.firstChild.nextSibling.firstChild.nodeValue
		
		Set objHTMLElement = objHTMLElement.nextSibling
		strWind = objHTMLElement.firstChild.title & " " & _
			objHTMLElement.firstChild.firstChild.nextSibling.firstChild.nodeValue & " " & _
			objHTMLElement.firstChild.firstChild.nextSibling.firstChild.nextSibling.firstChild.nodeValue
		
		Set objHTMLElement = objHTMLElement.nextSibling
		strHum = objHTMLElement.title & " " & objHTMLElement.firstChild.nodeValue & objHTMLElement.firstChild.nextSibling.firstChild.nodeValue
		
		WScript.Echo strCity
		WScript.Echo strDegree
		WScript.Echo strBar
		WScript.Echo strWind
		WScript.Echo strHum
		
		Exit For
	End If
Next

WScript.Quit 0
'=============================================================================

'=============================================================================
Function GetDocumentFromURL(strURL, strCharset)
	Const adModeReadWrite = 3
	
	Const adTypeBinary    = 1
	Const adTypeText      = 2
	
	Dim objHTMLDocument
	Dim objHTMLBaseElement
	Dim arrHtmlText
	Dim strUrlDomain
	Dim strContent
	
	
	Set objHTMLDocument = WScript.CreateObject("HTMLFile")
	
	With WScript.CreateObject("VBScript.RegExp")
		.Pattern = "^(http://.*?/).*"
		
		strUrlDomain = .Execute(strUrl).Item(0).SubMatches(0)
	End With
	
	With WScript.CreateObject("MSXML2.XMLHTTP")
		.open "GET", strURL, False
		.send
		arrHtmlText = .responseBody
	End With
	
	With WScript.CreateObject("ADODB.Stream")
		.Mode     = adModeReadWrite
		.Type     = adTypeBinary
		.Open
		.Write arrHtmlText
		
		.Position = 0
		.Type     = adTypeText
		.Charset  = strCharset
		
		
		strContent = Replace(.ReadText, "<head>", "<head><base href=""" & strUrlDomain & """>", 1, -1, vbTextCompare)
		
		With WScript.CreateObject("VBScript.RegExp")
			.Global     = True
			.IgnoreCase = True
			.Pattern = "(<script[^>]*)"
			
			objHTMLDocument.open
			objHTMLDocument.write .Replace(strContent, "<script type='text/plain'")
			objHTMLDocument.close
		End With
	End With
	
	Set GetDocumentFromURL = objHTMLDocument
	Set objHTMLDocument = Nothing
End Function
'=============================================================================
Цитата:
Код: Выделить весь код
Москва
+3°C
Давление 741 мм рт.ст.
Ветер западный 1 м/с
Влажность 96%
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:01, 17-11-2011 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


Так закопался в возможности bat/cmd что забыл посмотреть форум
Iska, огромное спасибо

вот только для меня cmd еще в процессе познания а vbs и подавно,
если можно вставьте комментарии, что за что отвечает.
задание сайта и кодировки я разобрал, а вот как, в последствии, происходит обработка полученного исходного кода.

и вывод происходит в окно, а как направить в файл

Отправлено: 11:27, 18-11-2011 | #12


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


campbell, код достаточно сложен, если Вы не знаете самой технологии, так что сами по себе комментарии вряд ли помогут.

Если вкратце, то:

1. При помощи регулярного выражения выделяем из URL основной домен.
2. При помощи объекта «MSXML2.XMLHTTP» получаем исходный код страницы.
3. Посредством объекта «ADODB.Stream» конвертируем полученный массив байт в текст (поскольку «MSXML2.XMLHTTP» всегда получает содержимое в кодировке UTF-8 — дополнительно конвертируем в оригинальную кодировку; в данном случае сие необязательно, поскольку оригинал и так в UTF-8, но я оставил данный приём для демонстрации).
4. При помощи вставки тэга «BASE» корректируем относительные ссылки в документе.
5. Чтобы избежать исполнения скриптов — посредством регулярного выражения корректируем тип тэгов «SCRIPT».
6. Посредством DOM (Использование HTML DOM (Document Object Model) в скриптах на базе Windows Script Host) делаем разбор получившегося html-документа:
а). Получаем коллекцию тэгов «H3».
б). Ищем среди них тэг с классом «typeC».
в). Далее опять же, посредством DOM, продвигаемся по дереву элементов, выделяем потребные нам элементы, получаем их значения.
Цитата campbell:
и вывод происходит в окно, а как направить в файл »
Например, используя обработчик «cscript.exe» (вместо «wscript.exe») и перенаправление вывода в файл:
Код: Выделить весь код
cscript.exe //nologo "E:\Песочница\0091\0001.vbs" >Result.txt
А какова у Вас глобальная цель?
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:41, 18-11-2011 | #13


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Цитата campbell:
топик просто для вопросов (глупых и не очень )) ) я бы регулярно пользовался, а то часто пытаясь разобрать скрипт упираешься в пару знаков и часами ищешь инфу, а зачем оно там стоит. »
Правила форума - одна проблема-одна тема. Если проблема будет с одним и тем же продуктом, создай тему с соответствующим названием и спрашивай сколько угодно

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Отправлено: 05:43, 19-11-2011 | #14



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] скрипт, который брал бы урл из переменной и сохралял исходный код веб страницы

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Nokia закрыла исходный код Symbian OSZone News Новости информационных технологий 3 11-04-2011 11:56
Broadcom открыла исходный код драйверов для своих Wi-Fi адаптеров OSZone News Новости информационных технологий 0 12-09-2010 11:30
Стоит ли Microsoft открыть исходный код Internet Explorer? OSZone News Новости и события Microsoft 2 22-03-2010 18:28
Подскажите код баннера верху страницы который юкоз использует QUMATOZ Вебмастеру 4 30-09-2008 17:34
* News * | исходный код новой версии Java Greyman Программирование и базы данных 1 19-01-2005 19:36




 
Переход