【问题标题】:Scraping html using [jsdom + qs]使用 [jsdom + qs] 抓取 html
【发布时间】:2012-07-17 20:51:40
【问题描述】:

我是使用 jsdom 和查询字符串的新手。我正在尝试为所有 iframe html 标签中的所有 soundcloud track_id 抓取页面。下面的代码记录了undefined,因为第一个 iframe 不是 soundcloud 播放器。

我该如何...

  1. 修改代码以检索所有 iframe 实例
  2. 使用 jsdom/qs 检查是否存在 http://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F 或仅存在 soundcloud。 (我可以使用 if 字符串包含字符串类型的 js 测试,但我认为使用 jsdom/qs 有更好的方法)。

    jsdom.env({
     html: 'A_URL',
     scripts: [
       'http://code.jquery.com/jquery-1.5.min.js'
     ],
     done: function(errors, window) {
      var $ = window.$;
      var src = $('iframe').attr('src');
      var aRes = qs.parse(decodeURIComponent(url.parse(src).query)).url.split('/');
      var track_id = aRes[aRes.length-1];
    
     console.log("track_id =", track_id);
     }
    });
    

【问题讨论】:

    标签: javascript node.js web-scraping jsdom


    【解决方案1】:
    $('iframe').each(function(index, element) {
      if (element.attr['src'].match(/soundcloud/)) {
        // do your stuff
        return false; // if there's only one relevant iframe
      }
    }
    

    【讨论】:

    • 我认为这在 soundcloud 参数之后需要一个额外的 ')'。
    • 感谢您的帮助。如何检查 iframe 中是否存在“src”?
    • 在编辑中修复了缺少的括号。通常iframe 总是有src,但如果在某些情况下可能没有,只需将测试更改为if (element.attr[src] && ...
    • 当我知道页面上有 10 多个带有 src 的 iframe 时,我不断收到 src is not defined
    • 是在执行原行之后:var src = $('iframe').attr('src'); 还是您更改了代码? (请注意,如果它是原始的并且您有多个 iframe,src 将被设置为第一个的“src”属性(或undefined,如果它没有)。这就是为什么你需要使用$('iframe').each()$('iframe')可以返回一个匹配多个元素的jQuery对象,如果你对这样的对象应用attr这样的方法,它只处理集合中的第一个元素。
    猜你喜欢
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2018-02-22
    • 2015-01-12
    相关资源
    最近更新 更多