无法在 Google Apps 脚本中解析来自 UrlFetchApp 的数据

Unable to parse data from UrlFetchApp in Google Apps Script

我当前的 Cloud 运行 URL returns 一个长字符串,与描述的格式完全匹配 here

当我在 Google Apps 脚本中 运行 以下代码时,我得到的日志输出为“1”。会发生什么,是整个字符串放在 data 数组的 [0][0] 位置而不是实际被解析。

function myFunction() {
const token = ScriptApp.getIdentityToken();
const options = {
  headers: {'Authorization': 'Bearer ' + token}
}
var responseString = UrlFetchApp.fetch("https://*myproject*.a.run.app", options).getContentText();
var data = Utilities.parseCsv(responseString, '\t');
Logger.log(data.length);
}

我的预期输出是上述 link 中描述的二维数组,记录的输出长度为 18。

我已经通过以下方式确认了我的回复输出:

  1. 记录 responseString
  2. 正在将输出日志复制到单独的 var -> var temp = "copied-output"
  3. 将 parseCsv 行更改为 -> var data = Utilities.parseCsv(temp, '\t')
  4. 保存并运行使用新代码。然后输出一个长度为 18 的成功二维数组。

那么,为什么我当前的代码不起作用? 很高兴尝试任何事情,因为我没有想法。

编辑:下面有更多信息。

Python脚本代码

@app.route("/")
def hello_world():
    # Navigate to webpage and get page source
    driver.get("https://www.asxlistedcompanies.com/")
    soup = BeautifulSoup(driver.page_source, 'html.parser')

    # ##############################################################################
    #                   Used by Google Apps Script to create Arrays
    # This creates a two-dimensional array of the format [[a, b, c], [d, e, f]]
    # var csvString = "a\tb\tc\nd\te\tf";
    # var data = Utilities.parseCsv(csvString, '\t');
    # ##############################################################################
    long_string = ""
    limit = 1
    for row in soup.select('tr'):
        if limit == 20:
            break
        else:
            tds = [td.a.get_text(strip=True) if td.a else td.get_text(strip=True) for td in row.select('td')]
            count = 0
            for column in tds:
                if count == 4:
                    linetext = column + r"\n"
                    long_string = long_string+linetext
                else:
                    text = column + r"\t"
                    long_string = long_string+text
                    count = count+1
            limit = limit+1
        
    return long_string

GAS 代码已编辑:

function myFunction() {
const token = ScriptApp.getIdentityToken();
const options = {
  headers: {'Authorization': 'Bearer ' + token}
}
var responseString = UrlFetchApp.fetch("https://*myfunction*.a.run.app", options).getContentText();
Logger.log("The responseString: " + responseString);

Logger.log("responseString length: " + responseString.length)

Logger.log("responseString type: " + typeof(responseString))
var data = Utilities.parseCsv(responseString, '\t');
Logger.log(data.length);
}

GAS logs/output 根据要求:

6:17:11 AM  Notice  Execution started
6:17:22 AM  Info    The responseString: 14D\t1414 Degrees Ltd\tIndustrials\t21,133,400\t0.001\n1ST\t1ST Group Ltd\tHealth Care\t12,738,500\t0.001\n3PL\t3P Learning Ltd\tConsumer Discretionary\t104,613,000\t0.005\n4DS\t4DS Memory Ltd\tInformation Technology\t58,091,300\t0.003\n5GN\t5G Networks Ltd\t\t82,746,600\t0.004\n88E\t88 Energy Ltd\tEnergy\t42,657,800\t0.002\n8CO\t8COMMON Ltd\tInformation Technology\t11,157,900\t0.001\n8IH\t8I Holdings Ltd\tFinancials\t35,814,200\t0.002\n8EC\t8IP Emerging Companies Ltd\t\t3,199,410\t0\n8VI\t8VIC Holdings Ltd\tConsumer Discretionary\t13,073,200\t0.001\n9SP\t9 Spokes International Ltd\tInformation Technology\t21,880,100\t0.001\nACB\tA-Cap Energy Ltd\tEnergy\t7,846,960\t0\nA2B\tA2B Australia Ltd\tIndustrials\t95,140,200\t0.005\nABP\tAbacus Property Group\tReal Estate\t1,679,500,000\t0.082\nABL\tAbilene Oil and Gas Ltd\tEnergy\t397,614\t0\nAEG\tAbsolute Equity Performance Fund Ltd\t\t107,297,000\t0.005\nABT\tAbundant Produce Ltd\tConsumer Staples\t1,355,970\t0\nACS\tAccent Resources NL\tMaterials\t905,001\t0\n
6:17:22 AM  Info    responseString length: 1020
6:17:22 AM  Info    responseString type: string
6:17:22 AM  Info    1.0
6:17:22 AM  Notice  Execution completed

问题:

使用 r'' raw string flag 分别生成 \n\t,文字 \n/t 而不是新行或制表符。这就解释了为什么您能够将“显示的”日志复制到一个变量并成功执行它。

解决方案:

不要使用 r 标志。

片段:

    linetext = column + "\n" #no flag
    long_string = long_string+linetext
else:
    text = column + "\t" #no flag