提问人:Darshan 提问时间:11/8/2023 最后编辑:Darshan 更新时间:11/8/2023 访问量:45
在 JavaScript 中解码字符串后删除转义字符时出现问题
Issue Removing Escape Characters After Decoding String in JavaScript
问:
我目前正在研究从 Google 地图 URL 中抓取数据。为了处理我需要的数据,我一直在使用正则表达式和 Node.js 中的替换方法清理 HTML。但是,我遇到了与从 JavaScript 字符串中删除转义字符相关的问题。尽管我努力使用 decodeURIComponent 解码字符串,但这些转义字符仍然存在。我正在寻求帮助,以找到成功删除这些转义字符的解决方案。
这是我的代码
const fs = require("fs");
const unirest = require("unirest");
const getData = async () => {
try {
let url = "https://www.google.com/maps/search/@40.7455096,-74.0083012,14z/coffee?hl=en";
const response = await unirest.get(url).headers({
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36",
});
let data = response.body;
function extractStringBetween(text, start, end) {
const startIndex = text.indexOf(start);
if (startIndex === -1) {
return null; // Starting point not found
}
const endIndex = text.indexOf(end, startIndex + start.length);
if (endIndex === -1) {
return null; // Ending point not found
}
return text.substring(startIndex + start.length, endIndex);
}
const startMarker = "window.APP_INITIALIZATION_STATE=";
const endMarker = ";window.APP_FLAGS";
const extractedText = extractStringBetween(data, startMarker, endMarker);
data = extractedText
data = data.toString();
data = data.replace(/\\"/g, '"');
data = data.replace(/\\"/g, '"');
data = data.replace(/\\n/g, "");
data = data.replace(/,null/g, "")
data = data.replace(/null,/g, "")
data = data.replace(/\\\//g,"/")
data = data.replace(/\/\/u003d/g, "=")
data = data.replace(/\/=/g, "=")
data = data.replace(/\/\/u0026/g, "&")
data = data.replace(/\/&/g, "&")
data = data.replace(")]}'", '');
data = data.replace(")]}'", '');
data = data.replace(/]"/g, ']');
data = data.replace(/"\[/g, "[");
data = data.replace(/\[^a-zA-Z0-9]/g, ''); //this thing can remove escape character but
// is not able to
data = decodeURIComponent(data)
try{
data = JSON.parse(data) // Here I get the error "Unexpected token because of invalid
} //JSON"
catch(e){
fs.writeFileSync("./google_maps.txt",data)
}
} catch (e) {
console.log(e);
}
};
getData();
有时此代码有效,但六分之一的请求会因此错误而失败。即使在使用 decodeURIComponent 对其进行解码后,输出中仍然有转义字符。
它们显示在生成的文件中,如下所示:
Il Fiorista Restaurant - Nomad | New York’s first home of the new floral \movement
虽然我希望它没有任何转义字符:
Il Fiorista Restaurant - Nomad | New York’s first home of the new floral movement
任何人都可以提供删除转义字符的解决方案吗?
我包含一个文本文件链接以供参考:
- 数据清理后,它仍然返回“意外令牌”错误。
- 手动清理数据后,这是我们预期的输出。
https://github.com/Darshan972/GoogleScrapingBlogs/blob/main/1.txt https://github.com/Darshan972/GoogleScrapingBlogs/blob/main/2.txt
答: 暂无答案
评论
/\\[^a-zA-Z0-9]/g
/\[^a-zA-Z0-9]/g
response.body