PowerShellでウェブページのスクレイピングを行い、ページネーションを処理するサンプルスクリプトを以下に示します。この例では、複数ページにわたるデータを取得する方法を説明します。ウェブサイトの構造によっては、実際のスクリプトを調整する必要があります。
📂WebScrapingSample
┣ 📜ScrapeData.ps1
┣ 📜Scraper.psm1
┣ 📜Utilities.psm1
┗ 📂Data
┗ 📜ScrapedData.csv
実際のデータスクレイピング処理をScrapeData.ps1
で行います。
ScrapeData.ps1
# モジュールのインポート
Import-Module "$PSScriptRoot\\\\Scraper.psm1"
Import-Module "$PSScriptRoot\\\\Utilities.psm1"
# スクレイピングを行う初期URL
$initialUrl = "<https://example.com/page1>"
# スクレイピング結果を格納する配列
$data = @()
# 現在のページURL
$currentUrl = $initialUrl
# ページが存在する限りループ
while ($currentUrl) {
# Webページの内容を取得
$htmlContent = Get-WebPageContent -url $currentUrl
# データを抽出
$pageData = Extract-Data -htmlContent $htmlContent
$data += $pageData
# 次のページのURLを取得
$currentUrl = Get-NextPageUrl -htmlContent $htmlContent
}
# データをCSVに保存
Save-DataToCsv -data $data -filePath "$PSScriptRoot\\\\Data\\\\ScrapedData.csv"
各関数の実装例を以下に示します。
Scraper.psm1
Function Get-WebPageContent {
param (
[string]$url
)
try {
$webClient = New-Object System.Net.WebClient
$content = $webClient.DownloadString($url)
return $content
} catch {
Write-Error "Failed to download content from $url"
return $null
}
}
Function Extract-Data {
param (
[string]$htmlContent
)
# ここにHTMLパース処理を記述
# 必要に応じてHtmlAgilityPackなどのライブラリを使用
$data = @()
# ダミーデータ
$data += [PSCustomObject]@{ Title = "Sample"; Link = "<https://example.com>" }
return $data
}
Function Get-NextPageUrl {
param (
[string]$htmlContent
)
# ここに次のページURL取得処理を記述
# 例: 正規表現やHtmlAgilityPackを使用して次のページリンクを抽出
if ($htmlContent -match 'href="([^"]+)" rel="next"') {
return $matches[1]
} else {
return $null
}
}
Utilities.psm1
Function Save-DataToCsv {
param (
[array]$data,
[string]$filePath
)
try {
$data | Export-Csv -Path $filePath -NoTypeInformation -Encoding UTF8
Write-Output "Data saved to $filePath"
} catch {
Write-Error "Failed to save data to $filePath"
}
}
これで、ページネーションを処理しながらデータをスクレイピングするサンプルスクリプトが完成です。このスクリプトを実行すると、複数ページにわたるデータが取得され、CSVファイルに保存されます。
graph TD
subgraph WebScrapingSample
direction TB
subgraph Data
ScrapedData[ScrapedData.csv]
end
subgraph Modules
subgraph Scraper
ScraperFile[Scraper.psm1]
subgraph ScraperFile
GetWebPageContent[Get-WebPageContent]
ExtractData[Extract-Data]
GetNextPageUrl[Get-NextPageUrl]
end
end
subgraph Utilities
UtilitiesFile[Utilities.psm1]
subgraph UtilitiesFile
SaveDataToCsv[Save-DataToCsv]
end
end
end
subgraph RootFiles
ScrapeDataFile[ScrapeData.ps1]
ScrapeDataFile --> ScraperFile
ScrapeDataFile --> UtilitiesFile
end
end
%% Functions within Scraper.psm1
GetWebPageContent --> htmlContent1[HTML Content]
ExtractData --> pageData[Page Data]
GetNextPageUrl --> nextPageUrl[Next Page URL]
%% Functions within Utilities.psm1
SaveDataToCsv --> csvFile[ScrapedData.csv]
%% Flow in ScrapeData.ps1
ScrapeDataFile --> initialUrl[Initial URL]
ScrapeDataFile --> whileLoop[While Loop]
whileLoop --> GetWebPageContent
whileLoop --> ExtractData
whileLoop --> GetNextPageUrl
whileLoop --> SaveDataToCsv