У меня есть список из нескольких тысяч URL-адресов, и я хотел бы найти на каждой из этих страниц определенное слово. Как я могу сделать это программно в Windows, предпочтительно с помощью VBScript или Powershell?
2 ответа
Изменить: оригинальный вопрос не указывал VBScript и Powershell. Я оставляю это предложение Python в надежде, что кто-то в будущем выиграет.
Какой самый быстрый способ сделать это программно в Windows? Я полагаю, что «самый быстрый» - это функция ваших способностей.
С моими навыками я бы подготовил для этого скрипт на Python, так как это был бы самый быстрый путь для меня. Сценарий, как я бы его написал, выглядит примерно так
search_string = "" #String you're search for
sites_with_str = {} #List that'll contain URLs with search_string in them
file = fopen("c:\sites.txt", "r")
for site in file:
html = wget(site)
if html.contains(search_string):
sites_with_str.add(site)
file.fclose() #it's just polite to close your read handles
#Print out the sites with the search string in them
print "\n\nSites Containing Search String \""+search_string+"\":"
for each in sites_with_str:
print each
Конечно, это своего рода псевдо-Python. Вам нужно найти библиотеку, которая захватит сайт для вас. И очевидно, что для поиска всех страниц на каждом сайте, на который есть ссылка во входном файле, потребуется небольшая рекурсивная функция и некоторый разбор строк.
Я решил свою проблему, если кто-то еще столкнется с таким же требованием:
$webClient = new-object System.Net.WebClient
$webClient.Headers.Add("user-agent", "PowerShell Script")
$info = get-content c:\path\to\file\urls.txt
foreach ($i in $info) {
$output = ""
$startTime = get-date
$output = $webClient.DownloadString($i)
$endTime = get-date
if ($output -like "*some dirty word*") {
"Success`t`t" + $i + "`t`t" + ($endTime - $startTime).TotalSeconds + " seconds"
}
}