【问题标题】:NodeJS and Cheerio web scrapingNodeJS 和 Cheerio 网页抓取
【发布时间】:2016-01-15 15:36:13
【问题描述】:

我做了一个应用程序,我在其中抓取了一个页面,在那个页面上我有一个这样的脚本

<script>
var myData = { Time: '10:46:29 am', car1: 'Volvo', car2: 'Ferarri', car3: 'VW' };
<script>

使用cheeriorequest 节点模块,我得到了脚本,但我需要得到car1car2car3 的值。

request('http://my-url.com', function(error, response, body) {
    
    var $ = cheerio.load(body);
   
    var htmlData = $('body script').last().prev().html();
    console.log(data);  
        
});

我尝试使用JSON.parse(htmlData),但收到以下错误SyntaxError: Unexpected token T

有什么方法可以从脚本中解析 javascript,或者有人可以解释一下如何通过正则表达式获取 car1car2 的值吗?

【问题讨论】:

    标签: javascript regex node.js string


    【解决方案1】:

    我建议先进行一系列字符串替换,然后再进行JSON.load,以获取 JavaScript 对象,如下所示

    var data = "{ Time: '10:46:29 am', car1: 'Volvo', car2: 'Ferarri', car3: 'VW' };";
    var obj = JSON.parse(data
      .replace(/((?:[A-Za-z_][\w\d])+):/g, '"$1":')
      .replace(/'/g, '"')
      .replace(/;\s*$/, ''));
    console.log(obj.car1, obj.car2, obj.car3);
    // Volvo Ferarri VW
    

    这里,

    .replace(/((?:[A-Za-z_][\w\d])+):/g, '"$1":')
    

    (?:[A-Za-z_][\w\d])+形式的所有匹配字符串替换为"包围的相同匹配字符串,后跟:"$1":

    然后

    .replace(/'/g, '"')
    

    将所有' 替换为"(假设您的数据中没有')。

    然后

    .replace(/;\s*$/, '')
    

    将用空字符串替换;,后面是空格字符(基本上我们会删除它们)。

    此时,字符串将如下所示

    { "Time": "Friday", "car1": "Volvo", "car2": "Ferarri", "car3": "VW" }
    

    现在我们只需将其解析为 JSON 字符串,使用 JSON.parse 即可获取 JavaScript 对象。

    【讨论】:

    • 谢谢!我只有一个问题,更换所有东西后,我的时间现在看起来像这样“时间”:“10”:“43”:31 am”,我想因为你匹配字符串和:,我该如何解决是吗?
    • @Hiero 等等,你的问题没有显示时间部分
    • 是的,抱歉,我的时间看起来像 Time: '10:46:29 am'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多