You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本开发:对财富100强URL数组使用Invoke-WebRequest

财富100强企业URL抓取与多线程内容获取脚本

我看你正在编写PowerShell脚本,用来抓取指定页面的财富100强企业URL,再通过多线程(Runspace/PoshRSJob)获取这些URL的内容并保存到文件。我把你的代码片段补全并优化了一下,能更顺畅完成任务:

# 导入PoshRSJob模块(用于多线程处理)
Import-Module PoshRSJob -ErrorAction Stop

# 目标页面URL
$targetUrl = "https://www.zyxware.com/articles/4344/list-of-fortune-500-companies-and-their-websites"

# 抓取页面内容
try {
    $page = Invoke-WebRequest -Uri $targetUrl -ErrorAction Stop
    Write-Host "成功获取目标页面内容"
}
catch {
    Write-Error "无法获取目标页面: $_"
    exit 1
}

# 从页面表格中提取财富100强企业的URL
$tables = @($page.ParsedHtml.GetElementsByTagName("table"))
if ($tables.Count -eq 0) {
    Write-Error "页面中未找到表格"
    exit 1
}

# 假设第一个表格是财富500强列表,提取前100条的官网链接
$fortune100Urls = @()
$rows = $tables[0].GetElementsByTagName("tr")
for ($i = 1; $i -le [Math]::Min(100, $rows.Count - 1); $i++) {
    $cells = $rows[$i].GetElementsByTagName("td")
    if ($cells.Count -ge 2) {
        # 假设第二列是企业官网链接(可根据实际页面结构调整索引)
        $link = $cells[1].GetElementsByTagName("a") | Select-Object -First 1
        if ($link -and $link.href) {
            # 转换相对链接为完整URL
            $fullUrl = [Uri]::new($targetUrl, $link.href).AbsoluteUri
            $fortune100Urls += $fullUrl
            Write-Host "已提取URL: $fullUrl"
        }
    }
}

if ($fortune100Urls.Count -eq 0) {
    Write-Error "未提取到任何企业URL"
    exit 1
}

# 创建输出目录(不存在则新建)
$outputDir = ".\Fortune100_Content"
if (-not (Test-Path -Path $outputDir)) {
    New-Item -ItemType Directory -Path $outputDir | Out-Null
}

# 用PoshRSJob多线程获取URL内容并保存
Write-Host "开始多线程获取页面内容..."
$jobs = $fortune100Urls | Start-RSJob -ScriptBlock {
    $url = $_
    # 用域名作为文件名,避免重复和混乱
    $outputPath = Join-Path $using:outputDir "$([Uri]::new($url).Host).html"
    
    try {
        $response = Invoke-WebRequest -Uri $url -TimeoutSec 30 -ErrorAction Stop
        $response.Content | Out-File -Path $outputPath -Encoding UTF8
        return "成功保存: $outputPath"
    }
    catch {
        return "失败 - $url : $_"
    }
}

# 等待所有任务完成并收集结果
$results = $jobs | Wait-RSJob | Receive-RSJob
$jobs | Remove-RSJob

# 输出最终结果
Write-Host "`n任务完成,结果如下:"
$results | ForEach-Object { Write-Host $_ }

脚本关键说明:

  • 错误处理:在页面抓取、URL提取、内容获取环节都加了异常捕获,避免脚本意外崩溃,还能清晰定位问题。
  • URL处理:自动把页面中的相对链接转换成完整URL,防止后续请求失败。
  • 多线程优化:借助PoshRSJob实现并行请求,比单线程快很多,适合批量URL处理。
  • 文件管理:创建专门的输出目录,用企业域名作为文件名,方便后续整理和查看。

内容的提问来源于stack exchange,提问作者mfalde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:32:45