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
相关产品推荐
相关产品推荐

