在雅虎管道中与正则表达式斗争

时间:2012-06-12 10:07:07

标签: regex rss web-scraping yahoo-pipes

我正在使用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');

所以我坚持如何提取链接,然后如何将其构建到管道上。任何对正确方向的帮助或推动都会非常感激。

2 个答案:

答案 0 :(得分:1)

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

在regex模块中使用稍微复杂的代码。除了尝试提取和分配变量

之外,通常更容易擦除您不想要的代码 plx.link.href 中的

找到这个 - > JavaScript(。+)作业替换为 - > 作业

plx.link.href 中的

找到这个 - > \'\); 替换为 - > 留空

代码的尾随位);需要反斜杠为'是控制字符串添加反斜杠 \ 使正则表达式以文本字符的形式读取它们。

这个正则表达式 a(。+?)b 意味着匹配或抓住& b并为这类事情派上用场。

答案 1 :(得分:0)

完整的URL解析并不简单,但如果有足够的约束,它就变得易于管理。

例如,如果您知道

  1. JavaScript:OpenAssignment(始终跟随/
  2. 第一个参数始终是引号中的十六进制+破折号,
  3. 第二个参数(至少是你需要的部分)也是引号,
  4. 并且您可以在“功能”
  5. 之后丢弃其余的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.