Что нового

Переход по ссылкам справочника

gezan1

Новичок
Сообщения
47
Репутация
0
Добрый день.
Подскажите, как пройти по всем ссылкам в справочнике, находящихся на нескольких страницах,
и собрать емейл и телефоны с открывшихся сайтов(на странице "Контакты").
Пока у меня, только собираются ссылки в массив с первой страницы, по две одинаковые.
Код:
#include <IE.au3>
#include <Array.au3>

$j = 0
Dim $aLinks[$j + 1][2]
$sUrl = 'http://www.bizspravka.su/%D0%90%D0%BD%D0%B0%D0%BF%D0%B0/search/?what=%D1%81%D0%B0%D0%B9%D0%B4%D0%B8%D0%BD%D0%B3'
$sSearch = '-id/?'

$oIE = _IECreate($sUrl)
For $i = 0 To 40 ;будем искать ссылки на 5-и первых страницах с результатами поиска.
    If $i Then ;на первой странице уже искали
        $sText = _IEBodyReadText($oIE) ;читаем текст на странице
        If StringInStr($sText, 'Следующая') Then ;если на странице есть этот текст
            _IELinkClickByText($oIE, 'Следующая') ;кликаем по ссылке, т.е. переходим на следующую страницу
        Else ;если на странице нет текста 'следующая'
            ExitLoop;выходим из цикла
        EndIf
    EndIf
$oLinks = _IELinkGetCollection($oIE)
For $oLink In $oLinks
    If StringInStr($oLink.href, $sSearch) Then
        $j += 1
        ReDim $aLinks[$j + 1][2]
        $aLinks[$j][0] = $oLink.innertext
        $aLinks[$j][1] = $oLink.href
    EndIf
Next
$aLinks[0][0] = $j
_ArrayDisplay($aLinks)
;_IEQuit($oIE)
Next
 

alex.n201

Новичок
Сообщения
25
Репутация
1
Как то так, данные записываются в файл
Код:
#include <IE.au3>
#include <Array.au3>
HotKeySet('{Esc}', '_Exit'); остановка скрипта кнопкой Esc
$j = 0
Dim $aLinks[$j + 1][2]

$oIE = _IECreate("http://www.bizspravka.su/%D0%90%D0%BD%D0%B0%D0%BF%D0%B0/search/?what=%D1%81%D0%B0%D0%B9%D0%B4%D0%B8%D0%BD%D0%B3")
For $i = 0 To 10 ;будем искать ссылки на 5-и первых страницах с результатами поиска.
   If $i Then ;на первой странице уже искали
        $sText = _IEBodyReadText($oIE) ;читаем текст на странице
        If StringInStr($sText, 'Следующая →') Then ;если на странице есть этот текст
            _IELinkClickByText($oIE, 'Следующая →') ;кликаем по ссылке, т.е. переходим на следующую страницу
        Else ;если на странице нет текста 'следующая'
            ExitLoop;выходим из цикла
        EndIf
    EndIf
   $oLinks = _IELinkGetCollection($oIE)
   For $oLink In $oLinks
	  If $oLink.classname="name" Then ; если ссылка с классом "name"
		 $j += 1
		 ReDim $aLinks[$j + 1][2]
		 $aLinks[$j][0] = $oLink.innertext
         $aLinks[$j][1] = $oLink.href
	  EndIf
   Next
$aLinks[0][0] = $j
Next

;_ArrayDisplay($aLinks)
; переходим по ссылкам с массива, собираем данные
For $i = 1 To UBound($aLinks) - 1
	Dim $aPhone[0]
	Dim $aEmail[0]
	_IENavigate($oIE, $aLinks[$i][1])
	$oDivTag = _IETagNameGetCollection ($oIE, "div")
	For $oDiv In $oDivTag
		If $oDiv.classname="firm_title" Then ; название
			$Nazv = $oDiv.getElementsByTagName("h1").item(0).innerText
		EndIf

	    If $oDiv.classname="left" And  $oDiv.id="num" Then ; телефон, email.. в массив
			If StringLeft ($oDiv.innerText, 1) == '+' Or StringLeft ($oDiv.innerText, 1) == "8" Then
				_ArrayAdd($aPhone, $oDiv.innerText)
			ElseIf StringInStr ($oDiv.innerText, '@' ) Then
				_ArrayAdd($aEmail, $oDiv.innerText)
			EndIf
	    EndIf
	Next
	;_ArrayDisplay($aPhone)
	;_ArrayDisplay($aEmail)
	; записываем в файл
	$hFile = FileOpen(@ScriptDir & '\Info.txt', 1)
		FileWrite($hFile, @CRLF & $i & ". " & $Nazv & @CRLF)
		For $x = 0 To UBound($aPhone) - 1
			FileWrite($hFile, "Телефон: " & $aPhone[$x] & @CRLF)
		Next
		$aPhone = ""
		For $y = 0 To UBound($aEmail) - 1
			FileWrite($hFile, "Email: " & $aEmail[$y] & @CRLF)
		Next
		$aEmail = ""
	FileClose($hFile)
	If $i = UBound($aLinks) - 1 Then MsgBox(0, "", "Готово")
Next

Func _Exit()
    Exit
EndFunc   ;==>_Exit

P.S пока в IE не добавил в режим совместимости сайт bizspravka.su, были проблемы с _IENavigate
 
Автор
G

gezan1

Новичок
Сообщения
47
Репутация
0
alex.n201 Спасибо.
1.Твой скрип собирает ссылки только с первой страницы.
(Т.е. не срабатывает переход на страницу "Следующая").
2."Думает" долго,где-то больше часа на обработку одной страницы.
Почему-то начинает зависать со станицы "Инси"(может, потому-что там нет емейл,.. Там,где есть емейл, проходит быстро)
3.Телефоны собирает хорошо, но нужно еще и ЕМЕЛ, а его нет на этой странице, но он есть на сайте.
Поэтому, нужны еще два дополнительных перехода - один на сайт, второй на страницу "Контакты" на этом сайте.
И вот с этой страницы делать выборку емейл и телефонов.
Но мне это кажется не реальным, потому-что все сайты написаны по разному, и подогнать
их под один шаблон вряд-ли получится.
 

alex.n201

Новичок
Сообщения
25
Репутация
1
1, 2 - на следующую переходит, ничего не зависает, после открытия и загрузки стр, сразу переход к следующей.
P.S пока в IE не добавил в режим совместимости сайт bizspravka.su, были проблемы с _IENavigate
3 - собственно телефон и email берутся со страницы с раздела "Основная информация о компании"
Где там контакты? Там нет такого пункта
Поэтому, нужны еще два дополнительных перехода - один на сайт, второй на страницу "Контакты" на этом сайте.
И вот с этой страницы делать выборку емейл и телефонов.
Отсюда по подробнее
 
Автор
G

gezan1

Новичок
Сообщения
47
Репутация
0
Что у Вас выбирает
Код:
;_ArrayDisplay($aLinks)

У меня он делает выборку только первой страницы. 20 позиций и все. При его закрытии, переходит на страницу "Мастер дом"(т.е. переход по первой ссылке), а не на страницу "следующая".
alex.n201 сказал(а):
Отсюда по подробнее

В разделе "Основная информация о компании" нажать на ссылку сайта(перейти на сайт).На главной странице сайта может быть указан емейл, но это процентов на 40%.Поэтому на сайте нужно еще нажать кнопку "Контакты". там уже на 90% есть емейл.Вот оттуда и взять его и тел.
 

alex.n201

Новичок
Сообщения
25
Репутация
1
Код:
_ArrayDisplay($aLinks)

здесь массив всех ссылок на сайты по которым нужно перейти, по запросу "сайдинг" у меня 28, с 2-х стр
У меня он делает выборку только первой страницы
в консоль ошибку пишет?
Какая версия autoita, IE? может с этим связано
У меня все без проблем, может вариант не идеальный, я еще только учусь ;D
В разделе "Основная информация о компании" нажать на ссылку сайта(перейти на сайт).На главной странице сайта может быть указан емейл, но это процентов на 40%.Поэтому на сайте нужно еще нажать кнопку "Контакты". там уже на 90% есть емейл.Вот оттуда и взять его и тел.
Перейти например на Официальный сайт: http://www.insi.ru и отсюда с контактов?
С этим проблематично..
 
Автор
G

gezan1

Новичок
Сообщения
47
Репутация
0
Версия вроде не старая -3.3.12.0 В консоли - на каждый переход страницы выдает:
Код:
--> IE.au3 T3.0-1 Warning from function _IELoadWait, $_IESTATUS_LoadWaitTimeout
--> IE.au3 T3.0-1 Warning from function _IELoadWait, $_IESTATUS_LoadWaitTimeout
--> IE.au3 T3.0-1 Warning from function _IELoadWait, $_IESTATUS_LoadWaitTimeout
Но это не важно, если не возможно дойти до кнопки"Контакты".
 

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
gezan1
OffTopic:
Ваш пример скрипта не переходит на следующую страницу, и возможно я ошибаюсь, но Ваших разработок не вижу...аля сделайте за меня?
 
Верх