Что нового

Поиск ссылок на файлы в html коде; переименование файлов и самих ссылок

S

SergV

Гость
Версия AutoIt: 3.3.8

Описание:

Cайт у меня скачен и находится локально на компе, например я указываю местоположение папки в скрипте D:/abhidharma.ru/ и скрипт ищет по всем директориям html файлы, потом в них ищет ссылки на файлы (djvu|pdf|djv|doc), нужно чтобы регулярка искала вроде такой строки
Код:
<a href="../Guru%20Mahasiddhi/Content/Nagarjuna/0001.djvu">Философия срединности – мадхьямака.</a>
переименовывал саму ссылку в файле html на
Код:
<a href="../Guru%20Mahasiddhi/Content/Nagarjuna/Философия срединности – мадхьямака.djvu">Философия срединности – мадхьямака.</a>

и чтобы в директории валялся файл не 0001.djvu, а Философия срединности – мадхьямака.djvu !!!

Буду очень признателен за помощь.

Примечания:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
SergV,
Дайте или ссылку, или пример файла с текстом.
 
Автор
S

SergV

Гость
Пример страницы - http://abhidharma.ru/A/Raznoe/Filoc.htm
 

madmasles

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

$iCount = 0
$s_URL = 'http://abhidharma.ru/A/Raznoe/Filoc.htm'

$s_Sourse = InetRead($s_URL, 17)
If @error Then
	MsgBox(16, 'Error', 'InetRead')
	Exit
EndIf
$s_Sourse = BinaryToString($s_Sourse)
$aTemp = StringRegExp($s_Sourse, '(?is)style=(.*?href=".*?)</span>', 3)
$s_Sourse = ''
Dim $aResult[UBound($aTemp) + 1][2]
For $i = 0 To UBound($aTemp) - 1
	If StringRegExp($aTemp[$i], '\.(djvu|pdf|djv|doc)">') Then
		$iCount += 1
		$aResult[$iCount][0] = StringRegExpReplace($aTemp[$i], '(?is).*?(href=.*?)>.*', '\1')
		$aResult[$iCount][1] = StringStripWS(StringRegExpReplace($aTemp[$i], _
				'(?s)(' & $aResult[$iCount][0] & '|".*?"|>|<.*?>|\r|\n)', ' '), 7)
		$s_Sourse &= $iCount & '. ' & $aResult[$iCount][0] & @CRLF & $aResult[$iCount][1] & @CRLF & _
				'----------------------------------------' & @CRLF
	EndIf
Next
$aTemp = 0
ReDim $aResult[$iCount + 1][2]
$aResult[0][0] = $iCount
_ArrayDisplay($aResult)
$hFile = FileOpen(@ScriptDir & '\Href.txt', 2)
FileWrite($hFile, StringTrimRight($s_Sourse, 2))
FileClose($hFile)
Проверки на ошибки не делал.
 
Автор
S

SergV

Гость
madmasles , спасибо, но малость не то.
сайт у меня скачен и находится локально на компе, например я указываю местоположение папки в скрипте D:/abhidharma.ru/ и скрипт ищет по всем директориям html файлы, потом в них ищет ссылки на файлы (djvu|pdf|djv|doc) , нужно чтобы регулярка искала вроде такой строки
Код:
<a href="../Guru%20Mahasiddhi/Content/Nagarjuna/ 0001.djvu">Философия срединности – мадхьямака.</a>
переименовывал саму ссылку в файле html на
Код:
<a href="../Guru%20Mahasiddhi/Content/Nagarjuna/Философия срединности – мадхьямака.djvu">Философия срединности – мадхьямака.</a>
и чтобы в директории валялся файл не 0001.djvu, а Философия срединности – мадхьямака.djvu !!!
Такое вообще можно сделать?
 
Автор
S

SergV

Гость
У меня вроде в первом сообщении было написано что сайт скачен, а ссылку дал чтобы можно было посмотреть исходный текст страницы.

P.S. а как туда тему перенести ?
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
SergV
Начало
Код:
$test=StringRegExpReplace($test, '(?m)(<a href=".*/).*?(.djvu|.pdf|.djv|.doc)(">(.*?)</a>)', '\1\4\2\3.')

Но там в имени точка лишняя вставляется, в общем надо подольше разбираться.
 
Автор
S

SergV

Гость
AZJIO,
но там ссылки на файлы могут начинаться и так
Код:
<a href="../ddd/0001.pdf
и так
Код:
<a href="/sss/002.doc

и еще вся строка которая ищется через регулярное выражение может не находится на одной строке

Код:
<a
href="../0001.pdf">название 
файла</a>
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
SergV,
А как быть с таким именами?
  • Изложение традиции Читтаматры (Джамгён Конгтрул Лодрё Тхае. Том 2, стр. 497. pdf 200 Kb.).
  • Дхарма в филосовской традиции Татхагатагарбха (Вместилище (лоно) Татхагаты; абсолютное сознание). История системы Чжонанпа
  • (лекции академика Ф.И. Щербатского 1919 г. pdf 0,99 Kb. ). Теория познания и логика по учению позднейших буддистов ( Ф.И. Щербатской ). Часть 1
  • и т.д.
 
Автор
S

SergV

Гость
madmasles,
может это из за того что поиск в регулярном выражении у Вас сделан до слова
Код:
</span>
а если поставить
Код:
</a>
то не получается из-за того, что код на разных строчках
 
Автор
S

SergV

Гость
Может быть кто подскажет если какой нибудь сторонний софт или веб сервис который бы помог вытянуть все ссылки и текст ссысок со всего сайта?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
SergV
Чем скачивали сайт?
 
Автор
S

SergV

Гость
Offline Explorer Enterprise , но там нет такой функции, только список самих ссылок можно получить, а текста ссылок нет
 
Автор
S

SergV

Гость
Проблему мне решили, собрав ссылки и текст ссылок скриптом для создания карт сайта, а дальше все по плану с переименованием файлов, только ссылки остались без изменений.
Всем спасибо.
 
Верх