4

我想批量下载一些图片库。这些图像是免费提供的,不需要任何权限。我一辈子都无法让它发挥作用。这就是我到目前为止所拥有的。$pattern 吐出的是整个 HTML 行,而不仅仅是图像链接。你有什么可以给我的指点吗?循环设置为仅运行一次以进行测试。循环将遍历所有按数字组织的页面。

# Variables
$i=1        # Webpage Counter
$j=1        # Image Counter
$rootDir = "http://website.com/sport/galleries/"
$saveDir = "C:\Users\user\Desktop\"
$webpagetxt = "C:\Users\user\Desktop\page.txt"
$links = "C:\Users\user\Desktop\links.txt"
$regex = "http://website.com/galleries/[0-9]*/[^\.]*.JPG"

# Create folder to download to
#New-Item -Name SiouxSportsGalleries -ItemType directory

# Start Web Client
$client = New-Object System.Net.WebClient

# Main loop to get image links and download
    For($i=10; $i -le 10; $i++){

        # Download source code of the web page.
        $url = $rootDir+$i+'.htm'
        $webclient = new-object System.Net.WebClient
        $webpage = $webclient.DownloadString($url)
        $webpage > "$webpagetxt"

    # Parse web page and find image link.
       $pattern = Get-Content $webpagetxt | Select-String -pattern $regex -Allmatches
       echo "This is the link" $pattern
    #$pattern > $links

 }
4

2 回答 2

3

您需要提取匹配的值。Select-String返回对象,当您返回对象时echo,发生的事情是$pattern.ToString(). ToString()返回行,而不是匹配值。这将仅返回所有链接:

Get-Content $webpagetxt | Select-String -pattern $regex -Allmatches | % { $_.Matches | % { $_.Value } }

get-content顺便说一句,您可以简单地在换行符处拆分字符串以获取数组(如果这是您保存它的唯一原因),而不是保存网页并重新打开它。:-)

$webpage -split "`n" | Select-String -pattern $regex -Allmatches | % { $_.Matches | % { $_.Value } }

编辑要下载它,您可以使用另一个 foreach 循环来扩展它:

$rootDir = "http://website.com/sport/galleries/"
$saveDir = "C:\Users\user\Desktop\"
$webpage -split "`n" | Select-String -pattern $regex -Allmatches | % { $_.Matches | % { $_.Value } } | % {
    #Get local path
    $local = $_.Replace($rootDir, $saveDir)
    #Create path
    $file = New-Item $local -ItemType file -Force
    #Download
    $wb.DownloadFile($_, $file.FullName)
}
于 2013-04-07T08:57:49.800 回答
0

Select-String返回一个带有属性的对象。发送它来Get-Member看看你有什么好东西。您需要查看 match 属性,例如$pattern.matches. 查看文档中的示例 9 。

于 2013-04-07T07:40:47.650 回答