Что нового

Помогите с парсингом текста

Пост номер 10 был отмечен как лучший ответ.

TiranCool

Новичок
Сообщения
77
Репутация
0
Всем привет, помогите, пожалуйста, с парсингом текста, StringRegExp, текст:
<a href="/catalog/pribory-dlya-elektrohimicheskih-metodov-analiza/items/ph-metr-karmannyi-checker-komplekt-bazovyi-bez-poverki"> pH-МЕТР карманный CHECKER® +, комплект базовый (без поверки ) </a>
<p> HANNA-HI98100, ГРСИ 62105-15 </ p>
</ DIV>
<div class = 'measure'>
СИ
<span class = 'measure-help-icon' data-help-text = 'Условное обозначение "СРЕДСТВ ИЗМЕРЕНИЙ" Российского и зарубежного производства. & # x000A; & # x000A; К средствам измерений относятся технические средства - измерительные приборы и установки, измерительные приборы, лабораторные приборы, стандартные образцы состава или свойств материалов и веществ. & # x000A; & # x000A; Средства измерений в соответствии с федеральным законом "Об основных измерениях" должны иметь нормированные метрологические характеристики, утвержденные "РОССТАНДАРТОМ" и вносимые в "Государственный реестр средств измерений (ГРСИ)". & # x000A; & # x000A; Измерения для проведения технических (рабочих СИ) и метрологических (метрологических СИ) измерений. '> </ span>
</ DIV>
</ DIV>
<div class = 'item pack'>
1
шт
</ DIV>
<div class = 'item item'>
<input type = 'hidden' value = '5490.00'> <span class = 'big'> 5 490 </ span>, 00
</ DIV>
<div class = 'item count'>
<span> Вы заказали </ span>
<input id = "items_12208312_tabindex" name = "items [12208312] [tabindex]" type = "hidden" value = "5" />
<input halfpack = "1" id = "items_12208312_orders_item_amount" name = "items [12208312] [orders_item_amount]" packaging = "1" placeholder = "0" size = "30" tabindex = "5" type = "text" units = "шт" />
<SPAN> шт </ SPAN>
</ DIV>
</ DIV>
</ DIV>

Что требуется на выходе:
pH-МЕТР карманный CHECKER® +, комплект базовый (без поверки )
HANNA-HI98100, ГРСИ 62105-15
СИ
шт
5490.00

Сам код:
Код:
#include <Array.au3>
#include <Date.au3>
#include <Encoding.au3>
#include <Excel.au3>

$aLogins = FileReadToArray(@ScriptDir & "\logins.txt") ;берем логины из файла
$xvost = FileReadToArray(@ScriptDir & "\xvost.txt") ; берем хвост сайта





If Not IsArray($aLogins) Then Exit MsgBox(4096, "", "Файл с ID не найден")

; Наименование товара
For $sLogin In $aLogins
   $sUrl = "[URL]https://nevareaktiv.ru/[/URL]" & $sLogin & $xvost
   ConsoleWrite("Проверяем " & $sUrl & @CRLF)
   $sHtml = BinaryToString(InetRead($sUrl, 8), 16)
   $code = _Encoding_CyrillicTo1251($sHtml)
   $aPlayers = StringRegExp($code, '/catalog/(.*)/a', 3) ;
      If IsArray($aPlayers) Then
         For $sPlayers In $aPlayers
            $sAccounts = StringRegExp($sPlayers, '">(.*)<', 3)[0]
;             FileWrite(@ScriptDir & '/111.txt', $sAccounts & @CRLF)
         Next
      EndIf
Next

Дополнительные файлы во вложении.
Так же хотелось бы записать полученные данные в файле Excel, так же скриншот во вложени

EXCEL.jpg
 

Вложения

Последнее редактирование:

ra4o

AutoIT Гуру
Сообщения
1 066
Репутация
206
Желательно текст что-бы было несолько позиций товаров.
К чему то что во вложении ?
 
Автор
T

TiranCool

Новичок
Сообщения
77
Репутация
0
Желательно текст что-бы было несолько позиций товаров.
К чему то что во вложении ?
Код:
Во вложении файл с дополнение к ссылке, если посоветуете лучший вариант, буду рад.
Я пытался разобраться в функции StringRegExp, но не понял как использовать метасимволы.

В общем я хочу сделать так, через браузер (скрытый если так возможно или свернутый) переходить и формировать заказ на сайте из экселя
[automerge]1585510156[/automerge]
Текст
[SPOILER="Текст для парсинга"]

<div class='goods-list subcategory-good-list'>
<div class='table'>
<div class='thead'>
<div class='item name up'>
<div class='name-container'>
<span class='sort-link'>
<a href="/search/items?direction=desc&amp;order=name&amp;q=">Название</a>
</span>
<p>Название, НТД</p>
</div>

</div>
<div class='item pack'>
<span class='sort-link'>
<span class='title'>Фасовка</span>
</span>
<p>единица измерения</p>
</div>
<div class='item price'>
<span class='sort-link'>
<span class='title'>Цена,</span>
<span>руб.</span>
<br>
<span>без НДС (20%)</span>
</span>
<p>за единицу измерения</p>
</div>
</div>
<div class='tbody'>
<form accept-charset="UTF-8" action="/cart/update-items/catalog" class="new_orders_anonymous" data-remote="true" id="create_or_update_order" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="tJRsZJhk8T/w+9Ic9A/0c5q0f2ANhcWCb4Xippey4bw=" /></div><input id="url_for_offer" name="url_for_offer" type="hidden" value="/search/items" />
<div class='string' id='item_ph_metr_karmannyi_checker_komplekt_bazovyi_bez_poverki'>
<div class='list'>
<div class='item name-container'>
<div class='icons'>
<div class='cert'></div>
</div>
<div class='name'>
<a href="/catalog/pribory-dlya-elektrohimicheskih-metodov-analiza/items/ph-metr-karmannyi-checker-komplekt-bazovyi-bez-poverki">pH-МЕТР карманный CHECKER®+, комплект базовый (без поверки)</a>
<p>HANNA-HI98100, ГРСИ 62105-15</p>
</div>
<div class='measure'>
СИ
<span class='measure-help-icon' data-help-text='Условное обозначение "СРЕДСТВ ИЗМЕРЕНИЙ" российского и зарубежного производства.&#x000A;&#x000A;К средствам измерений относятся технические средства - измерительные приборы и установки, индикаторные трубки, мерная лабораторная посуда, стандартные образцы состава или свойств материалов и веществ.&#x000A;&#x000A;Средства измерений в соответствии с Федеральным законом "Об обеспечении единства измерений" должны иметь нормированные метрологические характеристики, утверждены "РОССТАНДАРТОМ" и внесены в "Государственный реестр средств измерений (ГРСИ)".&#x000A;&#x000A;Средства измерений предназначены для проведения технических (рабочие СИ) и метрологических (метрологические СИ) измерений.'></span>
</div>
</div>
<div class='item pack'>
1
шт
</div>
<div class='item price'>
<input type='hidden' value='5490.00'><span class='big'>5 490</span>,00
</div>
<div class='item count'>
<span>Вы заказали</span>
<input id="items_12208312_tabindex" name="items[12208312][tabindex]" type="hidden" value="5" />
<input halfpack="1" id="items_12208312_orders_item_amount" name="items[12208312][orders_item_amount]" packing="1" placeholder="0" size="30" tabindex="5" type="text" units="шт" />
<span>шт</span>
</div>
</div>
</div>

<div class='string' id='item_ph_metr_karmannyi_checker_komplekt_bazovyi_s_poverkoi'>
<div class='list'>
<div class='item name-container'>
<div class='icons'>
<div class='cert'></div>
</div>
<div class='name'>
<a href="/catalog/pribory-dlya-elektrohimicheskih-metodov-analiza/items/ph-metr-karmannyi-checker-komplekt-bazovyi-s-poverkoi">pH-МЕТР карманный CHECKER®+, комплект базовый (с поверкой)</a>
<p>HANNA-HI98100, ГРСИ 62105-15</p>
</div>
<div class='measure'>
СИ
<span class='measure-help-icon' data-help-text='Условное обозначение "СРЕДСТВ ИЗМЕРЕНИЙ" российского и зарубежного производства.&#x000A;&#x000A;К средствам измерений относятся технические средства - измерительные приборы и установки, индикаторные трубки, мерная лабораторная посуда, стандартные образцы состава или свойств материалов и веществ.&#x000A;&#x000A;Средства измерений в соответствии с Федеральным законом "Об обеспечении единства измерений" должны иметь нормированные метрологические характеристики, утверждены "РОССТАНДАРТОМ" и внесены в "Государственный реестр средств измерений (ГРСИ)".&#x000A;&#x000A;Средства измерений предназначены для проведения технических (рабочие СИ) и метрологических (метрологические СИ) измерений.'></span>
</div>
</div>
<div class='item pack'>
1
шт
</div>
<div class='item price'>
<input type='hidden' value='9180.00'><span class='big'>9 180</span>,00
</div>
<div class='item count'>
<span>Вы заказали</span>
<input id="items_12208313_tabindex" name="items[12208313][tabindex]" type="hidden" value="6" />
<input halfpack="1" id="items_12208313_orders_item_amount" name="items[12208313][orders_item_amount]" packing="1" placeholder="0" size="30" tabindex="6" type="text" units="шт" />
<span>шт</span>
</div>
</div>
</div>

<div class='string' id='item_ph_metr_karmannyi_checker_1_komplekt_bazovyi_bez_poverki'>
<div class='list'>
<div class='item name-container'>
<div class='icons'>
<div class='cert'></div>
</div>
<div class='name'>
<a href="/catalog/pribory-dlya-elektrohimicheskih-metodov-analiza/items/ph-metr-karmannyi-checker-1-komplekt-bazovyi-bez-poverki">pH-МЕТР карманный CHECKER®-1, комплект базовый (без поверки)</a>
<p>HANNA-HI98103, ГРСИ 62105-15</p>
</div>
<div class='measure'>
СИ
<span class='measure-help-icon' data-help-text='Условное обозначение "СРЕДСТВ ИЗМЕРЕНИЙ" российского и зарубежного производства.&#x000A;&#x000A;К средствам измерений относятся технические средства - измерительные приборы и установки, индикаторные трубки, мерная лабораторная посуда, стандартные образцы состава или свойств материалов и веществ.&#x000A;&#x000A;Средства измерений в соответствии с Федеральным законом "Об обеспечении единства измерений" должны иметь нормированные метрологические характеристики, утверждены "РОССТАНДАРТОМ" и внесены в "Государственный реестр средств измерений (ГРСИ)".&#x000A;&#x000A;Средства измерений предназначены для проведения технических (рабочие СИ) и метрологических (метрологические СИ) измерений.'></span>
</div>
</div>
<div class='item pack'>
1
шт
</div>
<div class='item price'>
<input type='hidden' value='4410.00'><span class='big'>4 410</span>,00
</div>
<div class='item count'>
<span>Вы заказали</span>
<input id="items_12208314_tabindex" name="items[12208314][tabindex]" type="hidden" value="7" />
<input halfpack="1" id="items_12208314_orders_item_amount" name="items[12208314][orders_item_amount]" packing="1" placeholder="0" size="30" tabindex="7" type="text" units="шт" />
<span>шт</span>
</div>
</div>
</div>

<div class='string' id='item_ph_metr_karmannyi_checker_1_komplekt_bazovyi_s_poverkoi'>
<div class='list'>
<div class='item name-container'>
<div class='icons'>
<div class='cert'></div>
</div>
<div class='name'>
<a href="/catalog/pribory-dlya-elektrohimicheskih-metodov-analiza/items/ph-metr-karmannyi-checker-1-komplekt-bazovyi-s-poverkoi">pH-МЕТР карманный CHECKER®-1, комплект базовый (с поверкой)</a>
<p>HANNA-HI98103, ГРСИ 62105-15</p>
</div>
<div class='measure'>
СИ
<span class='measure-help-icon' data-help-text='Условное обозначение "СРЕДСТВ ИЗМЕРЕНИЙ" российского и зарубежного производства.&#x000A;&#x000A;К средствам измерений относятся технические средства - измерительные приборы и установки, индикаторные трубки, мерная лабораторная посуда, стандартные образцы состава или свойств материалов и веществ.&#x000A;&#x000A;Средства измерений в соответствии с Федеральным законом "Об обеспечении единства измерений" должны иметь нормированные метрологические характеристики, утверждены "РОССТАНДАРТОМ" и внесены в "Государственный реестр средств измерений (ГРСИ)".&#x000A;&#x000A;Средства измерений предназначены для проведения технических (рабочие СИ) и метрологических (метрологические СИ) измерений.'></span>
</div>
</div>
<div class='item pack'>
1
шт
</div>
<div class='item price'>
<input type='hidden' value='8100.00'><span class='big'>8 100</span>,00
</div>
<div class='item count'>
<span>Вы заказали</span>
<input id="items_12208315_tabindex" name="items[12208315][tabindex]" type="hidden" value="8" />
<input halfpack="1" id="items_12208315_orders_item_amount" name="items[12208315][orders_item_amount]" packing="1" placeholder="0" size="30" tabindex="8" type="text" units="шт" />
<span>шт</span>
</div>
</div>
</div>

<div class='string' id='item_ph_metr_karmannyi_orp_komplekt_bazovyi_s_poverkoi'>
<div class='list'>
<div class='item name-container'>
<div class='icons'>
</div>
<div class='name'>
<a href="/catalog/pribory-dlya-elektrohimicheskih-metodov-analiza/items/ph-metr-karmannyi-orp-komplekt-bazovyi-s-poverkoi">pH-МЕТР карманный ORP, комплект базовый (с поверкой)</a>
<p>HANNA-HI98201</p>
</div>
<div class='measure'>
СИ
<span class='measure-help-icon' data-help-text='Условное обозначение "СРЕДСТВ ИЗМЕРЕНИЙ" российского и зарубежного производства.&#x000A;&#x000A;К средствам измерений относятся технические средства - измерительные приборы и установки, индикаторные трубки, мерная лабораторная посуда, стандартные образцы состава или свойств материалов и веществ.&#x000A;&#x000A;Средства измерений в соответствии с Федеральным законом "Об обеспечении единства измерений" должны иметь нормированные метрологические характеристики, утверждены "РОССТАНДАРТОМ" и внесены в "Государственный реестр средств измерений (ГРСИ)".&#x000A;&#x000A;Средства измерений предназначены для проведения технических (рабочие СИ) и метрологических (метрологические СИ) измерений.'></span>
</div>
</div>
<div class='item pack'>
1
шт
</div>
<div class='item price'>
<input type='hidden' value='17190.00'><span class='big'>17 190</span>,00
</div>
<div class='item count'>
<span>Вы заказали</span>
<input id="items_12208316_tabindex" name="items[12208316][tabindex]" type="hidden" value="9" />
<input halfpack="1" id="items_12208316_orders_item_amount" name="items[12208316][orders_item_amount]" packing="1" placeholder="0" size="30" tabindex="9" type="text" units="шт" />
<span>шт</span>
</div>
</div>
</div>

<div class='string' id='item_ph_metr_karmannyi_orp_combo_komplekt_bazovyi_s_poverkoi'>
<div class='list'>
<div class='item name-container'>
<div class='icons'>
<div class='cert'></div>
</div>
<div class='name'>
<a href="/catalog/pribory-dlya-elektrohimicheskih-metodov-analiza/items/ph-metr-karmannyi-orp-combo-komplekt-bazovyi-s-poverkoi">pH-МЕТР карманный ORP-COMBO, комплект базовый (с поверкой)</a>
<p>HANNA-HI98121, ГРСИ 62105-15</p>
</div>
<div class='measure'>
СИ
<span class='measure-help-icon' data-help-text='Условное обозначение "СРЕДСТВ ИЗМЕРЕНИЙ" российского и зарубежного производства.&#x000A;&#x000A;К средствам измерений относятся технические средства - измерительные приборы и установки, индикаторные трубки, мерная лабораторная посуда, стандартные образцы состава или свойств материалов и веществ.&#x000A;&#x000A;Средства измерений в соответствии с Федеральным законом "Об обеспечении единства измерений" должны иметь нормированные метрологические характеристики, утверждены "РОССТАНДАРТОМ" и внесены в "Государственный реестр средств измерений (ГРСИ)".&#x000A;&#x000A;Средства измерений предназначены для проведения технических (рабочие СИ) и метрологических (метрологические СИ) измерений.'></span>
</div>
</div>
<div class='item pack'>
1
шт
</div>
<div class='item price'>
<input type='hidden' value='27090.00'><span class='big'>27 090</span>,00
</div>
<div class='item count'>
<span>Вы заказали</span>
<input id="items_12208317_tabindex" name="items[12208317][tabindex]" type="hidden" value="10" />
<input halfpack="1" id="items_12208317_orders_item_amount" name="items[12208317][orders_item_amount]" packing="1" placeholder="0" size="30" tabindex="10" type="text" units="шт" />
<span>шт</span>
</div>
</div>
</div>

<div class='string' id='item_ph_metr_karmannyi_orp_new_komplekt_bazovyi_s_poverkoi'>
<div class='list'>
<div class='item name-container'>
<div class='icons'>
<div class='cert'></div>
</div>
<div class='name'>
<a href="/catalog/pribory-dlya-elektrohimicheskih-metodov-analiza/items/ph-metr-karmannyi-orp-new-komplekt-bazovyi-s-poverkoi">pH-МЕТР карманный ORP-NEW, комплект базовый (с поверкой)</a>
<p>HANNA-HI98120, ГРСИ 62105-15</p>
</div>
<div class='measure'>
СИ
<span class='measure-help-icon' data-help-text='Условное обозначение "СРЕДСТВ ИЗМЕРЕНИЙ" российского и зарубежного производства.&#x000A;&#x000A;К средствам измерений относятся технические средства - измерительные приборы и установки, индикаторные трубки, мерная лабораторная посуда, стандартные образцы состава или свойств материалов и веществ.&#x000A;&#x000A;Средства измерений в соответствии с Федеральным законом "Об обеспечении единства измерений" должны иметь нормированные метрологические характеристики, утверждены "РОССТАНДАРТОМ" и внесены в "Государственный реестр средств измерений (ГРСИ)".&#x000A;&#x000A;Средства измерений предназначены для проведения технических (рабочие СИ) и метрологических (метрологические СИ) измерений.'></span>
</div>
</div>
<div class='item pack'>
1
шт
</div>
<div class='item price'>
<input type='hidden' value='20880.00'><span class='big'>20 880</span>,00
</div>
<div class='item count'>
<span>Вы заказали</span>
<input id="items_12208318_tabindex" name="items[12208318][tabindex]" type="hidden" value="11" />
<input halfpack="1" id="items_12208318_orders_item_amount" name="items[12208318][orders_item_amount]" packing="1" placeholder="0" size="30" tabindex="11" type="text" units="шт" />
<span>шт</span>
</div>
</div>
</div>
[/SPOILER]
 
Последнее редактирование:

ra4o

AutoIT Гуру
Сообщения
1 066
Репутация
206
Попробуйте:
Код:
#include <Array.au3>
#include <Date.au3>
#include <Encoding.au3>
#include <Excel.au3>


$aLogins = FileReadToArray(@ScriptDir & "\logins.txt") ;берем логины из файла
$xvost = FileReadToArray(@ScriptDir & "\xvost.txt") ; берем хвост сайта

If Not IsArray($aLogins) Then Exit MsgBox(4096, "", "Файл с ID не найден")

; Наименование товара

Dim $aResult[1][6] = [['п/п', 'Наименование товара', 'ГОСТ,ТУ,каталожный', 'СИ', 'Ед.Изм', 'Цена']]
$n = 1
For $sLogin In $aLogins
    $sUrl = "https://nevareaktiv.ru/" & $sLogin & $xvost
    ConsoleWrite("Проверяем " & $sUrl & @CRLF)
    $sHtml = BinaryToString(InetRead($sUrl, 8), 16)
    $code = _Encoding_CyrillicTo1251($sHtml)

    $iPoz = 1
    While 1
        $aName = StringRegExp($code, '(?:<a href="/catalog/[^>]*)>(.*)</a', 1, $iPoz) ;
        If @error Then ExitLoop
        $n += 1
        ReDim $aResult[$n][6]
        $iPoz = @extended
        $aResult[$n - 1][0] = $n - 1
        $aGOST = StringRegExp($code, '<p>(.*)</p>', 1, $iPoz) ;
        $aSi = StringRegExp($code, "(?i)'measure'>\n(.*)", 1, $iPoz) ;
        $aMeasure = StringRegExp($code, "<span>(.*)</span>\n</div>", 1, $iPoz) ;
        $aPrice = StringRegExp($code, "value='([0-9.]*)", 1, $iPoz) ;
        $aResult[$n - 1][1] = $aName[0]
        $aResult[$n - 1][2] = $aGOST[0]
        $aResult[$n - 1][3] = $aSi[0]
        $aResult[$n - 1][4] = $aMeasure[0]
        $aResult[$n - 1][5] = $aPrice[0]

    WEnd

Next

$oExcel = _Excel_Open(False)
$oWorkbook = _Excel_BookNew($oExcel, 1)
_Excel_RangeWrite($oWorkbook, 1, $aResult)
_Excel_BookSaveAs($oWorkbook, @ScriptDir & '\Result.xlsx')
_Excel_Close($oExcel)
_ArrayDisplay($aResult)
 
Автор
T

TiranCool

Новичок
Сообщения
77
Репутация
0
Попробуйте:
Код:
#include <Array.au3>
#include <Date.au3>
#include <Encoding.au3>
#include <Excel.au3>


$aLogins = FileReadToArray(@ScriptDir & "\logins.txt") ;берем логины из файла
$xvost = FileReadToArray(@ScriptDir & "\xvost.txt") ; берем хвост сайта

If Not IsArray($aLogins) Then Exit MsgBox(4096, "", "Файл с ID не найден")

; Наименование товара

Dim $aResult[1][6] = [['п/п', 'Наименование товара', 'ГОСТ,ТУ,каталожный', 'СИ', 'Ед.Изм', 'Цена']]
$n = 1
For $sLogin In $aLogins
    $sUrl = "https://nevareaktiv.ru/" & $sLogin & $xvost
    ConsoleWrite("Проверяем " & $sUrl & @CRLF)
    $sHtml = BinaryToString(InetRead($sUrl, 8), 16)
    $code = _Encoding_CyrillicTo1251($sHtml)

    $iPoz = 1
    While 1
        $aName = StringRegExp($code, '(?:<a href="/catalog/[^>]*)>(.*)</a', 1, $iPoz) ;
        If @error Then ExitLoop
        $n += 1
        ReDim $aResult[$n][6]
        $iPoz = @extended
        $aResult[$n - 1][0] = $n - 1
        $aGOST = StringRegExp($code, '<p>(.*)</p>', 1, $iPoz) ;
        $aSi = StringRegExp($code, "(?i)'measure'>\n(.*)", 1, $iPoz) ;
        $aMeasure = StringRegExp($code, "<span>(.*)</span>\n</div>", 1, $iPoz) ;
        $aPrice = StringRegExp($code, "value='([0-9.]*)", 1, $iPoz) ;
        $aResult[$n - 1][1] = $aName[0]
        $aResult[$n - 1][2] = $aGOST[0]
        $aResult[$n - 1][3] = $aSi[0]
        $aResult[$n - 1][4] = $aMeasure[0]
        $aResult[$n - 1][5] = $aPrice[0]

    WEnd

Next

$oExcel = _Excel_Open(False)
$oWorkbook = _Excel_BookNew($oExcel, 1)
_Excel_RangeWrite($oWorkbook, 1, $aResult)
_Excel_BookSaveAs($oWorkbook, @ScriptDir & '\Result.xlsx')
_Excel_Close($oExcel)
_ArrayDisplay($aResult)
Круто, но он берет только одну и туже страницу(
Сообщение автоматически объединено:

Попробуйте:
Код:
#include <Array.au3>
#include <Date.au3>
#include <Encoding.au3>
#include <Excel.au3>


$aLogins = FileReadToArray(@ScriptDir & "\logins.txt") ;берем логины из файла
$xvost = FileReadToArray(@ScriptDir & "\xvost.txt") ; берем хвост сайта

If Not IsArray($aLogins) Then Exit MsgBox(4096, "", "Файл с ID не найден")

; Наименование товара

Dim $aResult[1][6] = [['п/п', 'Наименование товара', 'ГОСТ,ТУ,каталожный', 'СИ', 'Ед.Изм', 'Цена']]
$n = 1
For $sLogin In $aLogins
    $sUrl = "https://nevareaktiv.ru/" & $sLogin & $xvost
    ConsoleWrite("Проверяем " & $sUrl & @CRLF)
    $sHtml = BinaryToString(InetRead($sUrl, 8), 16)
    $code = _Encoding_CyrillicTo1251($sHtml)

    $iPoz = 1
    While 1
        $aName = StringRegExp($code, '(?:<a href="/catalog/[^>]*)>(.*)</a', 1, $iPoz) ;
        If @error Then ExitLoop
        $n += 1
        ReDim $aResult[$n][6]
        $iPoz = @extended
        $aResult[$n - 1][0] = $n - 1
        $aGOST = StringRegExp($code, '<p>(.*)</p>', 1, $iPoz) ;
        $aSi = StringRegExp($code, "(?i)'measure'>\n(.*)", 1, $iPoz) ;
        $aMeasure = StringRegExp($code, "<span>(.*)</span>\n</div>", 1, $iPoz) ;
        $aPrice = StringRegExp($code, "value='([0-9.]*)", 1, $iPoz) ;
        $aResult[$n - 1][1] = $aName[0]
        $aResult[$n - 1][2] = $aGOST[0]
        $aResult[$n - 1][3] = $aSi[0]
        $aResult[$n - 1][4] = $aMeasure[0]
        $aResult[$n - 1][5] = $aPrice[0]

    WEnd

Next

$oExcel = _Excel_Open(False)
$oWorkbook = _Excel_BookNew($oExcel, 1)
_Excel_RangeWrite($oWorkbook, 1, $aResult)
_Excel_BookSaveAs($oWorkbook, @ScriptDir & '\Result.xlsx')
_Excel_Close($oExcel)
_ArrayDisplay($aResult)
Объединил хвост с логином и все работает хорошо, Спасибо.
Сообщение автоматически объединено:

Попробуйте:
Код:
#include <Array.au3>
#include <Date.au3>
#include <Encoding.au3>
#include <Excel.au3>


$aLogins = FileReadToArray(@ScriptDir & "\logins.txt") ;берем логины из файла
$xvost = FileReadToArray(@ScriptDir & "\xvost.txt") ; берем хвост сайта

If Not IsArray($aLogins) Then Exit MsgBox(4096, "", "Файл с ID не найден")

; Наименование товара

Dim $aResult[1][6] = [['п/п', 'Наименование товара', 'ГОСТ,ТУ,каталожный', 'СИ', 'Ед.Изм', 'Цена']]
$n = 1
For $sLogin In $aLogins
    $sUrl = "https://nevareaktiv.ru/" & $sLogin & $xvost
    ConsoleWrite("Проверяем " & $sUrl & @CRLF)
    $sHtml = BinaryToString(InetRead($sUrl, 8), 16)
    $code = _Encoding_CyrillicTo1251($sHtml)

    $iPoz = 1
    While 1
        $aName = StringRegExp($code, '(?:<a href="/catalog/[^>]*)>(.*)</a', 1, $iPoz) ;
        If @error Then ExitLoop
        $n += 1
        ReDim $aResult[$n][6]
        $iPoz = @extended
        $aResult[$n - 1][0] = $n - 1
        $aGOST = StringRegExp($code, '<p>(.*)</p>', 1, $iPoz) ;
        $aSi = StringRegExp($code, "(?i)'measure'>\n(.*)", 1, $iPoz) ;
        $aMeasure = StringRegExp($code, "<span>(.*)</span>\n</div>", 1, $iPoz) ;
        $aPrice = StringRegExp($code, "value='([0-9.]*)", 1, $iPoz) ;
        $aResult[$n - 1][1] = $aName[0]
        $aResult[$n - 1][2] = $aGOST[0]
        $aResult[$n - 1][3] = $aSi[0]
        $aResult[$n - 1][4] = $aMeasure[0]
        $aResult[$n - 1][5] = $aPrice[0]

    WEnd

Next

$oExcel = _Excel_Open(False)
$oWorkbook = _Excel_BookNew($oExcel, 1)
_Excel_RangeWrite($oWorkbook, 1, $aResult)
_Excel_BookSaveAs($oWorkbook, @ScriptDir & '\Result.xlsx')
_Excel_Close($oExcel)
_ArrayDisplay($aResult)
Подождал пока все соберет в итоге, единицы измерения не правильные взяты, они меняются, может быть штука/упаковка/кг/г и тд, попробовал сам поправить, но выдает ошибку, вроде диапазон верный указал для парсинга, можете помочь?
 
Последнее редактирование:
Автор
T

TiranCool

Новичок
Сообщения
77
Репутация
0
Дайте ссылки по которым Вы работаете, если нет в этом секрета, можно в личку.
Секретов нет), вот ссылка - https://nevareaktiv.ru/search/items?q=натрий+едкий
Хотелось бы так же в экселе: (Пример,)
Наименование - НАТРИЙ едкий в гранулах в/сорт
квалификация - тех
фасовка - 25кг
цена - 85.80
 

Tempo

Скриптер
Сообщения
560
Репутация
176
Код:
#include <MsgBoxConstants.au3>
#include <InetConstants.au3>
#include <Excel.au3>
#include <Array.au3>
Opt("TrayAutoPause", 0)

_Parse("натрий едкий")

Func _Parse($sKeyword = "", $fPriceMin = Default, $fPriceMax = Default)
    Local $sURL = "https://nevareaktiv.ru/search/items?q=", _
            $aKeyword = StringToASCIIArray($sKeyword, Default, Default, $SE_UTF8)

    For $i = 0 To UBound($aKeyword) - 1
        Switch $aKeyword[$i]
            Case 45, 46, 48 To 57, 65 To 90, 95, 97 To 122, 126
                $sURL &= Chr($aKeyword[$i])
            Case 32
                $sURL &= "+"
            Case Else
                $sURL &= "%" & Hex($aKeyword[$i], 2)
        EndSwitch
    Next
    If $fPriceMin <> Default Then $sURL &= "&price_min=" & $fPriceMin
    If $fPriceMax <> Default Then $sURL &= "&price_max=" & $fPriceMax
    $sURL &= "&page="

    Local $iPage = 1, $dSrc, $aRe, $aReSub, $iRowCount, _
            $aOut[1][] = [[0, "Наименование товара", "ГОСТ, ТУ, каталожный", "СИ", "Ед изм", "Цена"]], _
            $iColCount = UBound($aOut, $UBOUND_COLUMNS)

    While 1
        ConsoleWrite(StringFormat("Page: %i\n", $iPage))

        $dSrc = InetRead($sURL & $iPage, $INET_FORCERELOAD)
        If @error Then ExitLoop

        $aRe = StringRegExp(BinaryToString($dSrc, $SB_UTF8), _
                "(?Us)class='name'.*href=""/catalog/.*"">(.*)<.*p>(.*)<.*class='measure'.*>\s*(.*)\s*<.*class='item pack'.*>\s*(.*)\s*<.*class='item price'.*value='(.*)'", _
                $STR_REGEXPARRAYGLOBALFULLMATCH)
        If @error Then ExitLoop

        $iRowCount = UBound($aRe)
        ReDim $aOut[$aOut[0][0] + $iRowCount + 1][$iColCount]

        For $i = 0 To $iRowCount - 1
            $aReSub = $aRe[$i]

            $aOut[0][0] += 1
            $aOut[$aOut[0][0]][0] = $aOut[0][0]
            For $j = 1 To $iColCount - 1
                $aOut[$aOut[0][0]][$j] = StringRegExpReplace($aReSub[$j], "(\s)+", " ")
            Next
        Next
        $iPage += 1
    WEnd
    If Not $aOut[0][0] Then Exit MsgBox($MB_SYSTEMMODAL, Default, "Пусто")

    Local $oExcel = _Excel_Open(False), _
            $oWorkbook = _Excel_BookNew($oExcel)

    $aOut[0][0] = "П/п"
    With _Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $aOut)
        .Columns.AutoFit()
        .Rows.AutoFit()
    EndWith
    _Excel_BookSaveAs($oWorkbook, @ScriptDir & "\Out.xlsx", Default, True)
    _Excel_Close($oExcel)
    ShellExecute(@ScriptDir)
EndFunc   ;==>_Parse
 
Автор
T

TiranCool

Новичок
Сообщения
77
Репутация
0
Код:
#include <MsgBoxConstants.au3>
#include <InetConstants.au3>
#include <Excel.au3>
#include <Array.au3>
Opt("TrayAutoPause", 0)

_Parse("натрий едкий")

Func _Parse($sKeyword = "", $fPriceMin = Default, $fPriceMax = Default)
    Local $sURL = "https://nevareaktiv.ru/search/items?q=", _
            $aKeyword = StringToASCIIArray($sKeyword, Default, Default, $SE_UTF8)

    For $i = 0 To UBound($aKeyword) - 1
        Switch $aKeyword[$i]
            Case 45, 46, 48 To 57, 65 To 90, 95, 97 To 122, 126
                $sURL &= Chr($aKeyword[$i])
            Case 32
                $sURL &= "+"
            Case Else
                $sURL &= "%" & Hex($aKeyword[$i], 2)
        EndSwitch
    Next
    If $fPriceMin <> Default Then $sURL &= "&price_min=" & $fPriceMin
    If $fPriceMax <> Default Then $sURL &= "&price_max=" & $fPriceMax
    $sURL &= "&page="

    Local $iPage = 1, $dSrc, $aRe, $aReSub, $iRowCount, _
            $aOut[1][] = [[0, "Наименование товара", "ГОСТ, ТУ, каталожный", "СИ", "Ед изм", "Цена"]], _
            $iColCount = UBound($aOut, $UBOUND_COLUMNS)

    While 1
        ConsoleWrite(StringFormat("Page: %i\n", $iPage))

        $dSrc = InetRead($sURL & $iPage, $INET_FORCERELOAD)
        If @error Then ExitLoop

        $aRe = StringRegExp(BinaryToString($dSrc, $SB_UTF8), _
                "(?Us)class='name'.*href=""/catalog/.*"">(.*)<.*p>(.*)<.*class='measure'.*>\s*(.*)\s*<.*class='item pack'.*>\s*(.*)\s*<.*class='item price'.*value='(.*)'", _
                $STR_REGEXPARRAYGLOBALFULLMATCH)
        If @error Then ExitLoop

        $iRowCount = UBound($aRe)
        ReDim $aOut[$aOut[0][0] + $iRowCount + 1][$iColCount]

        For $i = 0 To $iRowCount - 1
            $aReSub = $aRe[$i]

            $aOut[0][0] += 1
            $aOut[$aOut[0][0]][0] = $aOut[0][0]
            For $j = 1 To $iColCount - 1
                $aOut[$aOut[0][0]][$j] = StringRegExpReplace($aReSub[$j], "(\s)+", " ")
            Next
        Next
        $iPage += 1
    WEnd
    If Not $aOut[0][0] Then Exit MsgBox($MB_SYSTEMMODAL, Default, "Пусто")

    Local $oExcel = _Excel_Open(False), _
            $oWorkbook = _Excel_BookNew($oExcel)

    $aOut[0][0] = "П/п"
    With _Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $aOut)
        .Columns.AutoFit()
        .Rows.AutoFit()
    EndWith
    _Excel_BookSaveAs($oWorkbook, @ScriptDir & "\Out.xlsx", Default, True)
    _Excel_Close($oExcel)
    ShellExecute(@ScriptDir)
EndFunc   ;==>_Parse
Проверил, он как я понял парсит конкретную позицию, но я имею ввиду чуть чуть другое.
На словах выглядит следующим образом: берем все с сайта, я в экселе с помощью формул выбираю позиции и у меня формируется грубо говоря заказ с перечнем необходимых позиций. Примерно выглядит как корзина на этом же сайте.
 

Tempo

Скриптер
Сообщения
560
Репутация
176
Проверил, он как я понял парсит конкретную позицию, но я имею ввиду чуть чуть другое.
На словах выглядит следующим образом: берем все с сайта, я в экселе с помощью формул выбираю позиции и у меня формируется грубо говоря заказ с перечнем необходимых позиций. Примерно выглядит как корзина на этом же сайте.
Удалите ключевое слово

Код:
;~ ...
_Parse()
;~ ...
 
Верх