Как скачать все файлы с определенного сайта - PullRequest
1 голос
/ 20 июня 2019

На следующем веб-сайте предоставлена ​​статистика .xlsx: https://www.ifo.de/umfragen/zeitreihen Папки ссылок корректируются ежемесячно.

Как загрузить все файлы с помощью PowerShell?

Я уже пробовал командлет Invoke-WebRequest, но он не показывает никаких ссылок, пример:

Пример 1 не доставляет записи в download_link.txt

$u = 'https://www.ifo.de/umfragen/zeitreihen/'
$l = (Invoke-WebRequest –Uri $u).Links | ? href -like *xlsx*
Set-Content c\test_path\download_link.txt -Value $l
$l | select -Unique href | % {
    #get file name
    $name = $l | ? href -eq $_.href | select -First 1 -ExpandProperty innerHtml
    "going to DL $name"
    #get actual DL link
    $mp3 = Invoke-WebRequest $_.href |
           select -ExpandProperty Links |
           ? href -like *xlsx |
           select -ExpandProperty href
    #$mp3 = (Invoke-WebRequest ($_.href  | select -Unique href | select -    First 1 -ExpandProperty href)).Links | ? href -like *xlsx* | select -ExpandProperty href
    "real file is $xlsx, downloading..."
    timeout 5
    Invoke-WebRequest -Uri $xlsx -OutFile c\test_path\$name -Verbose
}

Пример 2 также не загружает файл .xlsx

$IOTD = ((Invoke-WebRequest -Uri ‘https://www.ifo.de/umfragen/zeitreihen/’).Links | Where {$_.href -like “*.xlsx*”}).href
(New-Object System.Net.WebClient).DownloadFile($IOTD,'c\test_path\')

Лучшим вариантом будет использование первого сценария для динамической записи ссылок на скачивание в текстовый файл, а затем загрузка всех предоставленных файлов .xlsx.

1 Ответ

0 голосов
/ 20 июня 2019

Это похоже на работу, но требует com-объект Internet Explorer (на основе https://stackoverflow.com/a/30975153/932282):

function Get-InternetDocument
{
    param (
        [Parameter(Mandatory=$true)]
        [String] $Url
    )

    $ie = New-Object -ComObject "InternetExplorer.Application"
    $ie.Visible = $false
    $ie.Navigate($Url)

    while ($ie.Busy -or $ie.ReadyState -lt 4) {
        Start-Sleep -Milliseconds 200
    }

    return $ie.Document
}

$url = "https://www.ifo.de/umfragen/zeitreihen/"
$document = Get-InternetDocument -Url $url

$links = $document.getElementsByTagName("a")
$links = $links | Where-Object { $_.href -match ".xlsx`$" } | Select-Object -ExpandProperty "href"

foreach ($link in $links)
{
    (New-Object -TypeName "System.Net.WebClient").DownloadFile($link, "c:\temp\$([System.IO.Path]::GetFileName($link))")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...