使用PowerShell抓取Enghindi网站数据遇问题及替代方案咨询
问题解决与替代方案
一、修复PowerShell脚本:单URL结果集中到单个单元格
现有脚本存在两个核心问题:一是循环结束后仅保留最后一个URL的处理结果,二是将结果拆分为多行导出。以下是修复后的脚本:
$URLs = Import-Csv -Path C:\Scripts\PS\urls.csv | Select-Object -ExpandProperty urls # 预先创建/清空输出文件(避免重复追加历史内容) $outputPath = "C:\Scripts\PS\output.csv" if (Test-Path $outputPath) { Remove-Item $outputPath } foreach ($url in $URLs) { try { # 请求目标页面 $web = Invoke-WebRequest -Uri $url -ErrorAction Stop # 提取<BIG>标签内的文本内容 $data = $web.AllElements | Where-Object { $_.TagName -eq "BIG" } | Select-Object -ExpandProperty InnerText # 截取到包含"which"的内容为止,并合并为单个字符串 $datafinal = $data.Where({ $_ -like "*which*" }, 'until') -join "`n" # 将当前URL的结果作为一行导出,确保结果集中在单个单元格 [PSCustomObject]@{ Url = $url Data = $datafinal } | Export-Csv -Path $outputPath -NoTypeInformation -Encoding Unicode -Append } catch { # 捕获请求失败的情况,记录错误信息 [PSCustomObject]@{ Url = $url Data = "请求错误: $($_.Exception.Message)" } | Export-Csv -Path $outputPath -NoTypeInformation -Encoding Unicode -Append } }
修复说明:
- 将导出逻辑移入URL遍历循环内,确保每个URL的结果都被处理导出
- 使用
-join "n"`将多行文本合并为单个字符串,CSV会自动将其放入单个单元格 - 添加异常处理,避免单个URL请求失败导致整个脚本终止
二、英印地语词义抓取替代方案
1. 优化现有网站抓取
如果目标网站结构稳定,可以更精准定位内容:
- 使用CSS选择器替代标签匹配:比如
$web.ParsedHtml.querySelectorAll("div.content-block big")(需根据页面实际HTML结构调整) - 检查页面是否有JSON格式的词义数据(通过浏览器开发者工具查看网络请求),直接提取JSON内容会比解析DOM更高效
2. 谷歌翻译API实现
谷歌翻译API的实现难度低于预期,只需申请API密钥即可调用:
- 步骤:
- 登录谷歌云控制台,创建翻译API项目并获取API密钥
- 使用PowerShell调用REST接口实现翻译
function Translate-ToHindi { param( [Parameter(Mandatory=$true)][string]$EnglishText, [Parameter(Mandatory=$true)][string]$ApiKey ) $encodedText = [Uri]::EscapeDataString($EnglishText) $apiUrl = "https://translation.googleapis.com/language/translate/v2?q=$encodedText&target=hi&key=$ApiKey" try { $response = Invoke-RestMethod -Uri $apiUrl -Method Get return $response.data.translations[0].translatedText } catch { return "翻译失败: $($_.Exception.Message)" } } # 使用示例 Translate-ToHindi -EnglishText "computer" -ApiKey "你的谷歌API密钥"
- 注意:谷歌翻译API有免费额度,超出后需付费,适合小批量翻译需求
3. 其他免费/低成本API方案
- DeepL API:提供免费调用额度,翻译质量较高,调用逻辑与谷歌API类似
- 微软Azure翻译API:有免费试用额度,支持多语言翻译,需在Azure平台创建服务获取密钥
4. 本地离线翻译
若需离线使用,可借助带命令行接口的翻译软件:
- 安装DeepL桌面版,使用其命令行工具
deepl.exe实现本地翻译,无需联网
内容的提问来源于stack exchange,提问作者Jitendra Kush
相关产品推荐
相关产品推荐

