Что нового

Получение внутренних ссылок сайта

viter

Новичок
Сообщения
40
Репутация
1
Есть сайт и адрес типа :
Код:
www.blablabla.ru/1/www.site.com
Необходима функция находящая все внутренние ссылки на сайте в пределах
Код:
www.site.com
и содержащие только
Код:
www.site.com
например:
Код:
www.blablabla.ru/999/www.site.com/index.php&rt=12
www.blablabla.ru/138/www.site.com/forum/torg
www.blablabla.ru/345/www.site.com/digger.php
www.blablabla.ru/fert/556/www.site.com/19923/guarany/133.html
www.blablabla.ru/189/coint/www.site.com.php?id=635

По поводу оплаты можете писать в скайп - virt177
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Ссылки нужно получить только с указанной страницы?

Тогда примерно так:

Код:
#include <Array.au3>

$sHost = 'www.blablabla.ru'
$sPage = '/'

$sRead = BinaryToString(InetRead('http://' & $sHost & $sPage))

$aURLs = StringRegExp($sRead, '(?i)((?:\Q' & $sHost & '\E|\.)/[^\h''"]*)', 3)
_ArrayDisplay($aURLs)
 
Автор
V

viter

Новичок
Сообщения
40
Репутация
1
Ссылки нужно получить только с указанной страницы?
Нет программа должна переходить по ссылкам хотя бы с глубиной 3-4 (опять таки в рамках site.com) и собирать ссылки там отсеивая те которые уже есть
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
viter [?]
программа должна переходить по ссылкам хотя бы с глубиной 3-4 (опять таки в рамках site.com) и собирать ссылки там отсеивая те которые уже есть
Скорость работы программы критичный фактор?
 
Автор
V

viter

Новичок
Сообщения
40
Репутация
1
Трудно сказать, чем быстрее конечно тем лучше так как работа программы в планах будет вестись круглосуточно, на данном этапе думаю что это не критерий, если в рамках разумного.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Вот очень грубый набросок, особо не тестировал:

Код:
#include <Array.au3>

$sURL = 'www.blablabla.ru/'
$iLevel = 2

$aURLs = _GetSubURLs($sURL, $iLevel)
_ArrayDisplay($aURLs)

Func _GetSubURLs($sURL, $iLevel = 1)
	If $iLevel < 1 Then Return
	
	Local $sHost = StringRegExpReplace($sURL, '(?:http://)?([^/]*).*?', '\1')
	Local $sRead = BinaryToString(InetRead('http://' & $sURL))
	Local $aURLs = StringRegExp($sRead, '(?i)((?:\Q' & $sHost & '\E|\.)/[^\h''"]*)', 3)
	
	Local $aTmp_URLs = $aURLs, $aSubURLs
	
	For $i = 0 To UBound($aURLs)-1
		$aSubURLs = _GetSubURLs($aURLs[$i], $iLevel - 1)
		
		For $j = 0 To UBound($aSubURLs)-1
			If _ArrayBinarySearch($aTmp_URLs, $aSubURLs[$j]) = -1 Then
				_ArrayAdd($aTmp_URLs, $aSubURLs[$j])
			EndIf
		Next
	Next
	
	Return $aURLs
EndFunc
 
Автор
V

viter

Новичок
Сообщения
40
Репутация
1
Спасибо, скрипт я долго подстраивал и он вроде заработал, но не в моем случае(((
Проблема у меня в том что ссылки на странице видимо организованы через javascript или еще как-то, в итоге ссылки в чистом виде никуда не ведут и следовательно программа переходя на следующий уровень и проверяя ссылки там естественно ничего не находит, а если кликнуть по ней в браузере идет перенаправление на другой адрес. Это как-то решаемо?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
viter [?]
Это как-то решаемо?
Возможно, через функции библиотеки IE.au3, см. справку, или подожди пока кто-то другой в этом заинтересуется, у меня пока особо нет времени, сори.
 
Автор
V

viter

Новичок
Сообщения
40
Репутация
1
Почему у вас тут
Код:
If _ArrayBinarySearch($aTmp_URLs, $aSubURLs[$j]) = -1 Then

все ок работает, а у меня в аналогичном коде пока не подставил _ArraySort находило совпадения 1 раз из 10, от чего это зависит?
вот мой кусок
Код:
if StringRegExp($aURLs[$t],'(?<=//)([^\h''"]*)',0)=1 then
   $sa1CopyUrl=StringRegExp($aURLs[$t],'(?<=//)([^\h''"]*)',1)
	_ArraySort($aCopyUrl)
		If _ArrayBinarySearch($aCopyUrl, $sa1CopyUrl[0]) = -1 Then
			 _ArrayAdd($aCopyUrl, $sa1CopyUrl[0])
		Endif
Endif
 

BIOS

Жизнь - игра. График - супер, но сюжет - хреновый.
Сообщения
173
Репутация
69
Т.к. Бинарный поиск (BinarySearch) работает только для сортированных списков/массивов
 
Верх