<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; WSH: Парсинг HTML]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=10472&amp;type=atom" />
	<updated>2015-08-12T10:13:33Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=10472</id>
		<entry>
			<title type="html"><![CDATA[Re: WSH: Парсинг HTML]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=96408#p96408" />
			<content type="html"><![CDATA[<p><strong>wisgest</strong>, мы с коллегой <strong>JSman</strong>, когда обсуждали эту тему, пришли к выводу, что вариант с <strong>document.write</strong> всё же предпочтительнее чем вставка в <strong>innerHTML</strong>. Выполнение скриптов можно предотвратить переводом документа в <strong>designMode</strong>, а корректность обработки стилей и прочих плюшек выполняется правильнее. А строку <strong>document.execCommand(&#039;stop&#039;)</strong> я пока что убрал из своего кода, так как с последними апдейтами на Win 7 проблема с подгрузкой ActiveX в документе пропала. В остальном код получается более компактным, имхо.</p><div class="codebox"><pre><code>var XMLHTTP = new ActiveXObject(&quot;Msxml2.XMLHTTP&quot;)

XMLHTTP.open(&#039;GET&#039;,&#039;http://rating.rbc.ru/&#039;,false)
XMLHTTP.send()

var doc = parseHTML(XMLHTTP.responseText)

WScript.Echo(doc.styleSheets[0].cssText)

function parseHTML(text){
    var doc = new ActiveXObject(&quot;htmlfile&quot;)
    doc.designMode = &#039;on&#039;;
    doc.write(text);
    doc.close();
    return doc
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2015-08-12T10:13:33Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=96408#p96408</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: Парсинг HTML]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=95509#p95509" />
			<content type="html"><![CDATA[<p>Когда передо мной встала такая задача, в HTA я воспользовался созданным с помощью <em>document.createElement()</em> элементом BODY, установив его содержимое через <em>.innerHTML</em>. Пока такой элемент не вставлен в документ, можно работать с деревом его узлов, но внешние ресурсы не загружаются и активное содержимое не выполняется. Думаю, вместо BODY с таким же успехом можно было использовать DIV, но ни элемент HTML, ни HEAD подобным образом использовать нельзя.<br /></p><div class="codebox"><pre><code>Element = document.createElement(&quot;BODY&quot;);
Element.innerHTML = Request.responseText;

Table = Element.getElementsByTagName(&quot;TABLE&quot;).item(3);
count = Table.rows.length;
// . . .
</code></pre></div><p>При этом за бортом оказывается всё содержимое HEAD, а также элементы TITLE и META, даже если они находятся в BODY. Чтобы не терялись находящиеся в HEAD элементы BASE, LINK, STYLE, SCRIPT можно добавить &quot;&lt;body&gt;&quot; в начало текста загружаемого в <em>.innerHTML</em> (или какой нибудь знак недопустимый в HEAD, например, &quot;&amp;nbsp;&quot;).</p><p>Не в HTA можно поступить подобным же образом:<br /></p><div class="codebox"><pre><code>htmldoc = new ActiveXObject(&quot;htmlfile&quot;);
htmldoc.write(&quot;&quot;); htmldoc.close();
Element = htmldoc.createElement(&quot;BODY&quot;);
Element.innerHTML = &quot;HTML-код для разбора&quot;;
</code></pre></div><p>но можно и проще:<br /></p><div class="codebox"><pre><code>htmldoc = new ActiveXObject(&quot;htmlfile&quot;);
htmldoc.write(&quot;&quot;); htmldoc.close();
htmldoc.body.innerHTML = &quot;HTML-код для разбора&quot;;
</code></pre></div><p>— похоже, что так тоже внешние ресурсы не загружаются и активное содержимое не выполняется, но не уверен, что это не зависит ни от каких, возможно, нигде не описанных настроек. При этом, правда, упрощается разбор таблиц стилей из элементов STYLE: <br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;code</div><div class="fancy_spoiler"><div class="codebox"><pre><code>HTML = &quot;&lt;style type=&#039;text/css&#039;&gt;img {width: 200px;}&lt;/style&gt;&quot;;
htmldoc = new ActiveXObject(&quot;htmlfile&quot;);
htmldoc.write(&quot;&quot;); htmldoc.close();
htmldoc.body.innerHTML = &quot;&lt;body&gt;&quot; + HTML;
css = htmldoc.styleSheets.item(0);
WScript.Echo(css.cssText);
</code></pre></div></div></div><p>но не намного </p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;code</div><div class="fancy_spoiler"><div class="codebox"><pre><code>HTML = &quot;&lt;style type=&#039;text/css&#039;&gt;img {width: 200px;}&lt;/style&gt;&quot;;
htmldoc = new ActiveXObject(&quot;htmlfile&quot;);
htmldoc.write(&quot;&quot;); htmldoc.close();
element = htmldoc.createElement(&quot;body&quot;);
element.innerHTML = &quot;&lt;body&gt;&quot; + HTML;
css = htmldoc.createStyleSheet();
css.cssText = element.getElementsByTagName(&quot;style&quot;).item(0).innerHTML;
WScript.Echo(
    css.rules.item(0).selectorText + &quot; {&quot;
    + css.rules.item(0).style.cssText + &quot;}&quot;);
</code></pre></div></div></div>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2015-07-14T17:13:54Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=95509#p95509</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: Парсинг HTML]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=92313#p92313" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>

HTMLParse(&quot;&lt;script&gt;alert()&lt;/script&gt;&quot;);
HTMLParse(&quot;&lt;script&gt;alert()&lt;/script&gt;&quot;,1);

function HTMLParse(code, dont_prevent_code_exec)
{
    var document = new ActiveXObject(&quot;HTMLFile&quot;);
    if (!dont_prevent_code_exec) document.designMode = &#039;on&#039;;
    document.write(code);
    document.close();
    if (!dont_prevent_code_exec) document.execCommand(&#039;stop&#039;);
    return document.parentWindow;
}
</code></pre></div><p>jQuery лень переделывать под WSH <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p><br /><p>Что касается конвертирования, то вполне можно проходить по дереву узлов и структуре атрибутов. А если заниматься поиском и заменой, то возможны ошибки.</p>]]></content>
			<author>
				<name><![CDATA[JSmаn]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24434</uri>
			</author>
			<updated>2015-03-05T20:24:50Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=92313#p92313</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[WSH: Парсинг HTML]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=92247#p92247" />
			<content type="html"><![CDATA[<p>Всем доброго времени суток!</p><p>Хочу найти удобное решение для <strong>парсинга HTML</strong>. Не в контексте определенной задачи, а, скорее, общий подход, позволяющий по заложенному принципу извлечь данные из HTML кода, полученного с помощью HTTP-запроса. Например, извлечь текстовое содержимое элементов с определенными аттрибутами или / и расположением в дереве: ячеек в столбце таблицы, пунктов выпадающего списка; получить значения скрытых полей формы для POST-запроса, и т. п.. Определяющие критерии - быстрая и гибкая настройка и подбор шаблонов под структуру конкретного сайта, без установки / регистрации дополнительных компонентов.</p><p>Первое, что приходит в голову - работа с <strong>DOM</strong>, вероятно даже подключение функционала <strong>jQuery</strong>. Но хотелось бы отказаться от использования <strong>IE</strong> и <strong>htmlfile</strong>, таким образом предотвратив запуск скриптов, активного содержимого (java-плагинов, flash, ...), загрузку внешних ресурсов (изображений, медиа-файлов, скриптов, CSS, ...). Так же популярны <strong>RegExp</strong> и <strong>XPath</strong>. На мой взгляд для подобных задач лучшей будет реализация на <strong>MSXML</strong> с <strong>XPath</strong>, но тут актуален вопрос преобразования HTML в валидный XML.</p><p>Поделитесь решениями, которые приходилось использовать вам.</p><p>Вот некоторые ссылки, относящиеся к вопросу:<br /><a href="http://forum.script-coding.com/viewtopic.php?id=8253">AutoIt3: Парсер HTML</a><br /><a href="http://forum.script-coding.com/viewtopic.php?id=8652">VBS: Парсинг HTML через MSXML</a><br /><a href="http://forum.script-coding.com/viewtopic.php?id=6274">JScript: Эмуляция браузера</a><br /><a href="http://ejohn.org/apps/htmlparser/">Pure JavaScript HTML Parser</a><br /><a href="http://www.w3schools.com/xml/xml_syntax.asp">XML Syntax Rules</a><br /><a href="http://habrahabr.ru/post/114772/">Примеры xpath-запросов к html</a></p>]]></content>
			<author>
				<name><![CDATA[omegastripes]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=29228</uri>
			</author>
			<updated>2015-03-04T13:45:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=92247#p92247</id>
		</entry>
</feed>
