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

使用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密钥即可调用:

  • 步骤:
    1. 登录谷歌云控制台,创建翻译API项目并获取API密钥
    2. 使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:05:19