【问题标题】:Struggling with regex in yahoo pipe在雅虎管道中与正则表达式作斗争
【发布时间】:2012-06-12 10:07:06
【问题描述】:

我正在使用 Yahoo Pipes 构建一个抓取工具,它可以通过 xPath 抓取我们公司的微型网站,并生成一个 RSS 提要,然后我可以将其嵌入到主网站中。

到目前为止,我已经从页面上抓取了职位名称和位置,但我无法将项目链接到微型网站。

到目前为止,这是我的管道:http://pipes.yahoo.com/pipes/pipe.info?_id=2bb5b8fedd0064b64d0e8861e3fc8fd5

我想我需要从每个节点中提取 href 链接,然后应用正则表达式,但我真的无法理解它。

代码中的链接如下所示:www2.jobs.badenochandclark.ch/JavaScript:OpenAssignment('a960c93a-11fe-4751-bc27-83a48429c3ba',%20'/Jobs/Details/a960c93a-11fe-4751- bc27-83a48429c3ba');

但我正在努力生成一个基本上可以做到这一点的正则表达式: www2.jobs.badenochandclark.ch/JavaScript:OpenAssignment('a960c93a-11fe-4751-bc27-83a48429c3ba',%20'/Jobs/Details/a960c93a-11fe-4751-bc27-83a48429c3ba');

所以我被困在如何提取链接以及如何将其构建到管道上。任何朝着正确方向的帮助或轻推将不胜感激。

【问题讨论】:

    标签: regex rss web-scraping yahoo-pipes


    【解决方案1】:

    给你.. http://pipes.yahoo.com/pipes/pipe.info?_id=d564b802185d5777d757ed4189470941

    在正则表达式模块中使用了稍微不太复杂的代码。删除不需要的代码通常比尝试提取并分配给变量更容易

    plx.link.href 中找到这个-> JavaScript(.+)Jobs 替换为->jobs

    plx.link.href 中找到这个-> \'\); 替换为->留空

    代码的尾随位 ');需要反斜杠,因为 ') 是控制字符添加反斜杠 \ 使得正则表达式从字面上读取它们作为文本字符。

    这部分正则表达式 a(.+?)b 表示匹配或抓取 a & b 之间的所有内容,并且对于这类事情非常有用。

    【讨论】:

    • 谢谢!我不知道 a(.+?)b。该解决方案效果惊人!
    【解决方案2】:

    完整的 URL 解析并不简单,但只要有足够的限制,它就会变得易于管理。

    例如,如果你知道

    1. JavaScript:OpenAssignment( 始终跟随/
    2. 第一个参数始终是引号中的十六进制+破折号字符串,
    3. 第二个参数(至少是您需要的部分)也在引号中,
    4. 并且您可以丢弃“函数”之后的 URL 的剩余部分

    那么这样的事情可能是一个起点:

    \/JavaScript:OpenAssignment\([^'"]*['"][0-9a-fA-F\-]+['"][^,)]*,[^'")]*['"]([0-9a-fA-F\-]+)['"].*
    

    然后,$1 将包含您希望保留的匹配项。解释如下。

    \/                           Slashes need to be escaped (usually).
    JavaScript:OpenAssignment    Our function of interest.
    \(                           Parentheses need to be escaped too.
    [^'"]*                       We're looking for a quote next, so ignore any
                                 string of non-quotes, e.g. %20.
    ['"]                         A quote character.
    [0-9a-fA-F\-]+               A hexadecimal-and-dashes string.
    ['"]                         A quote character.
    [^,)]*                       We're looking for a comma next, so ignore any
                                 string of non-quotes, e.g., again, %20.
    ,                            A comma character.
    [^'"]*                       We're looking for a quote again, so ignore any
                                 string of non-quotes, e.g. %20.
    ['"]                         A quote character.
    ([0-9a-fA-F\-]+)             A hexadecimal-and-dashes string, this time captured.
    ['"]                         A quote character.
    .*                           The rest of the string that we don't care about.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多