экстрагирование ссылок по признаку из html-файла
Имеется папка с html-файлами, содержащими разнообразные гиперссылки.
Из этих ссылок интересуют ссылки типа "http://xyz-user.livejournal.com/24701. html?thread=1004158#t1004158"
Можно ли написать js/vbs файл, который извлекал бы такие ссылки из всех html-файлов этой папки по признакам - они в кавычках, содержат блок html?thread= и http://xyz-user.livejournal.com/ (последнее впрочем не принципиально т.к. блок html?thread= содержится только среди ссылок с http://xyz-user.livejournal.com/) и выдавал бы текстовый файл со списком таких ссылок?
|
El Sanchez |
05-06-2014 13:59 2360313 |
ruslaw, пробуйте:
читать дальше »
Код:
Option Explicit
Const ForReading = 1, ForWriting = 2
Dim objArgs, objFSO, objFolder, objFile, objTextStream, objResultTextStream
Dim objRegExp, objMatches, objMatch
Dim strFolder
'Check arguments count
Set objArgs = WScript.Arguments
If objArgs.Count = 0 Then
WScript.Echo "Syntax: " & WScript.ScriptName & " ""path to folder"""
WScript.Quit(1)
End If
'Check first argument is folder
Set objFSO = CreateObject("Scripting.FileSystemObject")
strFolder = WScript.Arguments(0)
If Not objFSO.FolderExists(strFolder) Then
WScript.Echo "Specified folder " & strFolder & " not exists"
WScript.Quit(1)
End If
'Create regexp object
Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Pattern = """http:\/\/[\w-]+\.livejournal.com\/\d+\.html\?thread\=\d+#t\d+"""
objRegExp.Global = True
objRegExp.IgnoreCase = True
'Create result log-file
Set objResultTextStream = objFSO.OpenTextFile(objFSO.GetParentFolderName(WScript.ScriptFullName) & "\result.log", ForWriting, True)
'Enumerate html-files in folder
Set objFolder = objFSO.GetFolder(strFolder)
For Each objFile in objFolder.Files
If (UCase(objFSO.GetExtensionName(objFile.Name)) = "HTML") And (objFile.Size > 0) Then
'Open file
Set objTextStream = objFSO.OpenTextFile(objFile.Path, ForReading)
'Read file and get matches
Set objMatches = objRegExp.Execute(objTextStream.ReadAll)
For Each objMatch In objMatches
'Write match
objResultTextStream.WriteLine objMatch.Value
Next
End If
Next
'Close result log-file
objResultTextStream.Close
'Cleanup
Set objArgs = Nothing
Set objFSO = Nothing
Set objFolder = Nothing
Set objFile = Nothing
Set objTextStream = Nothing
Set objResultTextStream = Nothing
Set objRegExp = Nothing
Set objMatches = Nothing
Set objMatch = Nothing
Set strFolder = Nothing
WScript.Echo "Done."
|
А как указать папку?
Я подставил вместо строки path to folder адрес C:\test
При нажатии на файл отвечает Windows Script Host подсказкой такого типа: Syntax: Threads.vbs "C:\test"
Если имя папки не подставлять то ответ будет такой: Syntax: Threads.vbs "path to folder"
Файл помещал и в папку и в корень.
|
El Sanchez |
06-06-2014 21:51 2360943 |
ruslaw, скрипт принимает путь к папке с html-файлами в качестве параметра. Открываете консоль из того места, где лежит скрипт, пишете threads.vbs "путь к папке с файлами". После обработки файлов рядом с скриптом будет результат в виде файла result.log.
|
Сработало. Прекрасно!
А нельзя ли сделать аналогичный скрипт, который извлекал бы из текстовых файлов в некоторой папке все строки заключенные между двумя определенными наборами символов, например keyword1 и keyword2, причем в любом из файлов таких строк будет не одна, и в строках возможны пробелы.
|
Цитата:
Цитата El Sanchez
Открываете консоль из того места, где лежит скрипт, пишете threads.vbs "путь к папке с файлами". »
|
В данном случае можно также просто перетащить папку на скрипт.
|
El Sanchez |
08-06-2014 10:21 2361450 |
Цитата:
Цитата ruslaw
А нельзя ли сделать аналогичный скрипт, который извлекал бы из текстовых файлов в некоторой папке все строки заключенные между двумя определенными наборами символов, например keyword1 и keyword2, причем в любом из файлов таких строк будет не одна, и в строках возможны пробелы. »
|
ruslaw, можно. В каких файлах искать? Как выглядят keyword1 и keyword2? Без дополнительных данных все ответы будут такими же, как в сообщении #2.
Цитата:
Цитата Iska
В данном случае можно также просто перетащить папку на скрипт. »
|
Iska, никаких легких путей, только комстрока, только хардкор :)
|
Цитата:
Цитата El Sanchez
Iska, никаких легких путей, только комстрока, только хардкор »
|
Народ измучен нарзаном избалован GUI.
|
имеются ввиду html-файлы в папке.
keyword1 = "level":1,
keyword2 = "expandchilds"
в обоих случаях кавычки входят в состав keywords
|
El Sanchez |
09-06-2014 10:58 2361931 |
ruslaw, в скрипте перепишите 2 строки:
Код:
'objRegExp.Pattern = """http:\/\/[\w-]+\.livejournal.com\/\d+\.html\?thread\=\d+#t\d+"""
objRegExp.Pattern = "(""level"":1,)(.+?)(""expandchilds"")"
...
'objResultTextStream.WriteLine objMatch.Value
objResultTextStream.WriteLine objMatch.SubMatches(1)
|
Время: 14:47.
© OSzone.net 2001-