Saya memiliki daftar beberapa ribu URL, dan saya ingin mencari setiap halaman untuk kata tertentu. Bagaimana saya bisa melakukan ini secara terprogram pada Windows, lebih disukai menggunakan VBScript atau Powershell?
Saya memiliki daftar beberapa ribu URL, dan saya ingin mencari setiap halaman untuk kata tertentu. Bagaimana saya bisa melakukan ini secara terprogram pada Windows, lebih disukai menggunakan VBScript atau Powershell?
Jawaban:
Sunting: Pertanyaan asli tidak menentukan VBScript & Powershell. Saya meninggalkan saran Python ini dengan harapan bahwa seseorang di masa depan akan mendapat manfaat.
Apa cara tercepat untuk melakukan ini secara terprogram pada Windows? Saya kira 'tercepat' adalah fungsi dari kemampuan Anda.
Dengan keahlian saya, saya akan membuat skrip python untuk itu, karena itu akan menjadi cara tercepat bagi saya. Script, seperti yang saya tulis, akan terlihat seperti
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
Tentu saja, itu semacam Pseudo-Python. Anda harus menemukan perpustakaan yang akan mengambil situs untuk Anda. Dan jelas itu membutuhkan sedikit fungsi rekursif dan beberapa penguraian string jika Anda ingin mencari semua halaman dalam setiap situs yang direferensikan dalam file input.
Saya memecahkan masalah saya sendiri, kalau-kalau ada orang lain yang menghadapi persyaratan yang sama:
$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"
}
}