【问题标题】:I could use some Regex help我可以使用一些正则表达式帮助
【发布时间】:2011-05-28 01:16:30
【问题描述】:

编辑:我在下面寻找的是这样的 REGEX 语句:

  • 抓取以 div 开头的行 class='productBundle' 以 .html 结尾。
  • 全部抢走(我觉得这叫贪心)

我会将这些存储在一个数组中,然后获取页面。对于每个页面,我需要获取图像 url,所以我需要正则表达式代码。我知道它很脆弱,但它可以满足我的需要。

我有一个 html 页面,包含以下几组:

<div class='productBundle' id='4086472'>
<table cellpadding="0" cellspacing="0" class='inv'>
<tr><td valign="middle" align="center" width="100%">
<a href="http://listing.com/product/view/4086794.html" alt="472">

我想检索 div class='productBundle' 下列出的所有 url。每页可以有任意数量,但总是在 productBundle div 下。

然后从那些 html 页面中,我需要获取产品图片 url

<img id=productImage' src='http://listing.com/item/472248/472.jpg'>

例如,我需要上面 html 代码中的“http://listing.com/item/472248/472.jpg”。

我可以使用 REGEX 代码的帮助来抓取第一部分中的页面,然后使用 REGEX 代码从 productImage 中抓取 url。

谢谢

【问题讨论】:

  • 你会使用什么语言? Ruby、Python、JavaScript、C#?
  • 答案可以是任何语言,我只需要 Regex 语句。我可以弄清楚其他一切。

标签: regex


【解决方案1】:

不,你需要帮助的是处理标记语言,而正则表达式就像用螺丝刀敲钉子一样。

换句话说,你可以让它工作,但要捕获所有边缘情况需要相当多的努力。

我的建议是使用 XML 处理工具,具体选择取决于您使用的语言和环境。

【讨论】:

    【解决方案2】:

    您确实应该为此使用 XPath。将文档加载到框架提供的任何支持 XPath 的容器中,然后发出以下查询:

    //div[@class='ProductBundle']//img/@src

    结果将是您需要的字符串列表。

    【讨论】:

      【解决方案3】:

      考虑: RegEx match open tags except XHTML self-contained tags


      编辑以添加有用的内容: 也就是说,这很脆弱,但应该可以工作......

      用于抓取 .html URL 的 Perl:

      $/ = undef; # read multiline
      $in = <>;   # read file provided on command line
      while ($in =~ s/<div class='productBundle'.*?<a href=\"(.*?html)//sm) {
        print "$1\n";
      }
      

      用于抓取 .jpg URL 的 Perl:

      $/ = undef; # read multiline
      $in = <>;   # read file provided on command line
      while ($in =~ s/<img id='productImage'.*?src='(.*?jpg)//sm) {
        print "$1\n";
      }
      

      .*? 表示匹配 0 个或多个字符不是贪婪地,这意味着它只会匹配到它后面出现的第一次。最后的 /sm 修饰符告诉 perl . 也应该匹配换行符(默认情况下不匹配)并且输入是多行的。

      【讨论】:

      • 是的,已经看到了。我知道它很脆弱,但对预期的目的有好处。
      • 更新添加了 perl 正则表达式应该可以工作假设一切如你所说
      • 感谢 perl,但确实需要正则表达式
      • 呃,s/&lt;div class='productBundle'.*?&lt;a href=\"(.*?html)//sm 和 s/&lt;img id='productImage'.*?src='(.*?jpg)//sm 是正则表达式部分
      【解决方案4】:

      生成 XML 表示 + XPATH 的 HTML 解析器。

      1. 选择HTML parser for your particular language that produces an XML representation。
      2. 在产品列表中插入 HTML,并使用此 XPath 语句 //div[@class='productBundle']//a/@href 查找 HREF。
      3. 遍历结果 - HTTP GET 每个 href 值
      4. 对于每个 href 值 - XPath 响应再次使用解析器解析图像路径//img/@src。

      【讨论】:

        【解决方案5】:

        这就是诀窍。

        "http:\/\/listing.com\/product+([^""])*html"

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-10
          • 1970-01-01
          • 2021-08-29
          • 2011-06-10
          相关资源
          最近更新 更多