Что нового

[Сеть, интернет] Запись в Excel по тэгу в исходном коде страницы

snezzok

bulatenok_64rus
Сообщения
12
Репутация
0
Привет всем!
Вот уже не первый день мучаюсь над такой головоломкой:

В Mozila Firefox:

Открыть исходный код страницы - (ctrl+u --- нашел сам)
Записать его в ИНИ файл - (IniWrite --- научился сам)
Найти в ИНИ,- ТЕГ "менеджер" - ?
Последовательно записать 500 символов от ТЕГ-а в другой ИНИ файл - ?
Отсеять из другого ИНИ файла все символы, кроме русских букв - ?
Записать оставшиеся русские буквы в неоткрытый ранее, но созданый, Excel документ - ?????????

Код:
https://rabota.yandex.ru/search.xml/?text=%D0%BC%D0%BE%D1%81%D0%BA%D0%B2%D0%B0+%D0%BC%D0%B5%D0%BD%D0%B5%D0%B4%D0%B6%D0%B5%D1%80+20000&rid=47

Пожалуйста помогите разобраться.
Заранее спасибо.
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Вам требуется все вакансии менеджера с зарплатой выше 20000 перенести в Excel - я правильно понял?
 
Автор
snezzok

snezzok

bulatenok_64rus
Сообщения
12
Репутация
0
edyapd сказал(а):
Вам требуется все вакансии менеджера с зарплатой выше 20000 перенести в Excel - я правильно понял?

Ой. Простите. Конечно-же нет. Не ту ссылку написал.

чуть ранее уже кликнута ссылка на вакансию:
Код:
http://samara.hh.ru/vacancy/12682823?utm_medium=meta&utm_source=rabota.yandex&utm_campaign=RU

Дак вот именно с этой страницей (hh точка ру ), и нужно проделать все, выше перечисленные, действия.


Добавлено:
Сообщение автоматически объединено:

Я понимаю, что данный скрипт не из области "на лету...". Но всё-же вот моя наработка до 3-го пункта:
Код:
FileOpen("c:\temp1\bot\w_log.ini", 9)
Sleep(5000)
Send("^u")
Sleep(1000)
WinActivate("Исходный код:")
Sleep(1000)
Send("^a")
Sleep(1000)
Send("^c")
Sleep(1000)
WinClose("Исходный код:")
Sleep(1000)
$sData = ClipGet()
IniWrite("c:\temp1\bot\w_log.ini", "1", "2", $sData)
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
М-да, умеете вы конечно объяснять.
Вам эту информацию надо вытащить и обработать
<title>Вакансия Офис-менеджер в Москве, работа в Гретта</title><meta name="description" content="Вакансия Офис-менеджер. Зарплата: от 35000 до 35000 руб.. Москва. Требуемый опыт: 1–3 года. Полная занятость. Дата публикации: 30.01.2015."><meta name="keywords" content="Вакансия Офис-менеджер в Москве, работа в Гретта"><meta property="og:image" content="http://samara.hh.ru"><meta property="og:image" content="http://i.hh.ru/i/logos/hh_ru.png?v=15042013"><meta property="og:description" content="Вакансия Офис-менеджер. Зарплата: от 35000 до 35000 руб.. Москва. Требуемый опыт: 1–3 года. Полная занятость. Дата публикации: 30.01.2015.">
или другую?
 
Автор
snezzok

snezzok

bulatenok_64rus
Сообщения
12
Репутация
0
edyapd сказал(а):
М-да, умеете вы конечно объяснять.
Вам эту информацию надо вытащить и обработать
<title>Вакансия Офис-менеджер в Москве, работа в Гретта</title><meta name="description" content="Вакансия Офис-менеджер. Зарплата: от 35000 до 35000 руб.. Москва. Требуемый опыт: 1–3 года. Полная занятость. Дата публикации: 30.01.2015."><meta name="keywords" content="Вакансия Офис-менеджер в Москве, работа в Гретта"><meta property="og:image" content="http://samara.hh.ru"><meta property="og:image" content="http://i.hh.ru/i/logos/hh_ru.png?v=15042013"><meta property="og:description" content="Вакансия Офис-менеджер. Зарплата: от 35000 до 35000 руб.. Москва. Требуемый опыт: 1–3 года. Полная занятость. Дата публикации: 30.01.2015.">
или другую?

Да. Да. Именно это.
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
И какой вид нужен для вывода? Всё в одну ячейку? Или разбивка по столбцам?
Код:
#include "String.au3"
#include "Array.au3"

$Url = "http://samara.hh.ru/vacancy/12682823?utm_medium=meta&utm_source=rabota.yandex&utm_campaign=RU"

$sData = InetRead($Url)
$aData = _StringBetween(BinaryToString($sData,4), 'description" content="', '">')
_ArrayDisplay($aData)	; Как видим там дважды повторяется информация

; Можно ещё и дальше преобразовать
_ArrayDisplay(StringSplit($aData[0], '. ', 3))
 
Автор
snezzok

snezzok

bulatenok_64rus
Сообщения
12
Репутация
0
edyapd сказал(а):
И какой вид нужен для вывода? Всё в одну ячейку? Или разбивка по столбцам?
Код:
#include "String.au3"
#include "Array.au3"

$Url = "http://samara.hh.ru/vacancy/12682823?utm_medium=meta&utm_source=rabota.yandex&utm_campaign=RU"

$sData = InetRead($Url)
$aData = _StringBetween(BinaryToString($sData,4), 'description" content="', '">')
_ArrayDisplay($aData)	; Как видим там дважды повторяется информация

; Можно ещё и дальше преобразовать
_ArrayDisplay(StringSplit($aData[0], '. ', 3))

Отлично. Вам большое спасибо, и да, было бы просто супер, если бы разбивалась по столбцам сверху вниз, результат полученный из второго окна _ArrayDisplay. То, есть:
Код:
#include "String.au3"
#include "Array.au3"

$Url = "http://samara.hh.ru/vacancy/12682823?utm_medium=meta&utm_source=rabota.yandex&utm_campaign=RU"

$sData = InetRead($Url)
$aData = _StringBetween(BinaryToString($sData,4), 'description" content="', '">')
;_ArrayDisplay($aData)   ; <--- это нет необходимости обрабатывать

; Можно ещё и дальше преобразовать
_ArrayDisplay(StringSplit($aData[0], '. ', 3))  ; <--- это записываем в Excel
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
snezzok,
Мой вариант.
Код:
#include <Array.au3>

Local $iCount, $a_Res[2][6] = [['Вакансия', 'Фирма', 'Ссылка']], $iInd = 3, $vHtml, $oHTML, $oTmps, $oTables, _
		$sUrl = 'http://samara.hh.ru/vacancy/12682823?utm_medium=meta&utm_source=rabota.yandex&utm_campaign=RU'

;~ HttpSetProxy(1)
$vHtml = InetRead($sUrl, 17)
If @error Then Exit 1
$vHtml = BinaryToString($vHtml, 4)
$oHTML = ObjCreate('HTMLFILE')
If @error Then Exit 2
$oHTML.Write($vHtml)
$vHtml = ''

$oTmps = $oHTML.GetElementsByTagName('h1')
For $oTmp In $oTmps
	If $oTmp.ClassName == 'title b-vacancy-title' Then
		$a_Res[1][0] = $oTmp.innertext
		ExitLoop
	EndIf
Next
$oTables = $oHTML.GetElementsByTagName('table')
For $oTable In $oTables
	If $oTable.ClassName == 'l' Then
		$oTmps = $oTable.GetElementsByTagName('a').item(0)
		$a_Res[1][1] = $oTmps.innertext
		$a_Res[1][2] = StringRegExpReplace($oTmps.href, '^.*:', 'http://samara.hh.ru')
		$iCount += 1
	EndIf
	If $oTable.ClassName == 'l-content-3colums' Then
		$oTmps = $oTable.GetElementsByTagName('th')
		For $oTmp In $oTmps
			$a_Res[0][$iInd] = $oTmp.innertext
			$iInd += 1
		Next
		$iInd = 3
		$oTmps = $oTable.GetElementsByTagName('td')
		For $oTmp In $oTmps
			$a_Res[1][$iInd] = $oTmp.innertext
			$iInd += 1
		Next
		$iCount += 1
	EndIf
	If $iCount > 1 Then ExitLoop
Next
$oTmps = 0
$oTables = 0
$iCount = 0
$iInd = 0
$oHTML.Close
$oHTML = 0

_ArrayDisplay($a_Res)
 
Автор
snezzok

snezzok

bulatenok_64rus
Сообщения
12
Репутация
0
snezzok сказал(а):
edyapd сказал(а):
И какой вид нужен для вывода? Всё в одну ячейку? Или разбивка по столбцам?
Код:
#include "String.au3"
#include "Array.au3"

$Url = "http://samara.hh.ru/vacancy/12682823?utm_medium=meta&utm_source=rabota.yandex&utm_campaign=RU"

$sData = InetRead($Url)
$aData = _StringBetween(BinaryToString($sData,4), 'description" content="', '">')
_ArrayDisplay($aData)	; Как видим там дважды повторяется информация

; Можно ещё и дальше преобразовать
_ArrayDisplay(StringSplit($aData[0], '. ', 3))

Отлично. Вам большое спасибо, и да, было бы просто супер, если бы разбивалась по столбцам сверху вниз, результат полученный из второго окна _ArrayDisplay. То, есть:
Код:
#include "String.au3"
#include "Array.au3"

$Url = "http://samara.hh.ru/vacancy/12682823?utm_medium=meta&utm_source=rabota.yandex&utm_campaign=RU"

$sData = InetRead($Url)
$aData = _StringBetween(BinaryToString($sData,4), 'description" content="', '">')
;_ArrayDisplay($aData)   ; <--- это нет необходимости обрабатывать

; Можно ещё и дальше преобразовать
_ArrayDisplay(StringSplit($aData[0], '. ', 3))  ; <--- это записываем в Excel

madmasles сказал(а):
snezzok,
Мой вариант.
Код:
#include <Array.au3>

Local $iCount, $a_Res[2][6] = [['Вакансия', 'Фирма', 'Ссылка']], $iInd = 3, $vHtml, $oHTML, $oTmps, $oTables, _
		$sUrl = 'http://samara.hh.ru/vacancy/12682823?utm_medium=meta&utm_source=rabota.yandex&utm_campaign=RU'

;~ HttpSetProxy(1)
$vHtml = InetRead($sUrl, 17)
If @error Then Exit 1
$vHtml = BinaryToString($vHtml, 4)
$oHTML = ObjCreate('HTMLFILE')
If @error Then Exit 2
$oHTML.Write($vHtml)
$vHtml = ''

$oTmps = $oHTML.GetElementsByTagName('h1')
For $oTmp In $oTmps
	If $oTmp.ClassName == 'title b-vacancy-title' Then
		$a_Res[1][0] = $oTmp.innertext
		ExitLoop
	EndIf
Next
$oTables = $oHTML.GetElementsByTagName('table')
For $oTable In $oTables
	If $oTable.ClassName == 'l' Then
		$oTmps = $oTable.GetElementsByTagName('a').item(0)
		$a_Res[1][1] = $oTmps.innertext
		$a_Res[1][2] = StringRegExpReplace($oTmps.href, '^.*:', 'http://samara.hh.ru')
		$iCount += 1
	EndIf
	If $oTable.ClassName == 'l-content-3colums' Then
		$oTmps = $oTable.GetElementsByTagName('th')
		For $oTmp In $oTmps
			$a_Res[0][$iInd] = $oTmp.innertext
			$iInd += 1
		Next
		$iInd = 3
		$oTmps = $oTable.GetElementsByTagName('td')
		For $oTmp In $oTmps
			$a_Res[1][$iInd] = $oTmp.innertext
			$iInd += 1
		Next
		$iCount += 1
	EndIf
	If $iCount > 1 Then ExitLoop
Next
$oTmps = 0
$oTables = 0
$iCount = 0
$iInd = 0
$oHTML.Close
$oHTML = 0

_ArrayDisplay($a_Res)

Отлично ребята. Осталось результат в как-то записать в ранее созданный, но не открытый Excel, и тогда будет полный "экстаз".
 
Автор
snezzok

snezzok

bulatenok_64rus
Сообщения
12
Репутация
0
АП!
P.S.
Это наверное проблема с Excel, раз "молчание ягнят"... :'( :'( :'(
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
snezzok [?]
Это наверное проблема с Excel
Дайте пример файла Excel.
[info border=#0000ff float=left]С такой постановкой вопроса Вам надо в Стол заказов.
Переоформите тему в соответствии с Правилами обязательного оформления тем в разделе "Стол заказов" и я ее туда перенесу.[/info]
 
Автор
snezzok

snezzok

bulatenok_64rus
Сообщения
12
Репутация
0
Всё. Разобрался сам. Тема решена.
--- Всем просто гигантское спасибо!!!!! :laugh: :laugh: :laugh: :IL_AutoIt_1: :IL_AutoIt_1:
 
Верх