Ruby Regex帮助

时间:2009-02-07 19:24:04

标签: ruby regex

我想从网站中提取会员主页网站链接。 看起来像这样

<a href="http://www.ptop.se" target="_blank">

我用它测试了这个网站

http://www.rubular.com/

<a href="(.*?)" target="_blank">

输出http://www.ptop.se

代码

    require 'open-uri'
    url = "http://itproffs.se/forumv2/showprofile.aspx?memid=2683"
    open(url) { |page| content = page.read()
    links = content.scan(/<a href="(.*?)" target="_blank">/)
    links.each {|link| puts #{link} 
    }
    }

如果你运行它,它不起作用。为什么不?

2 个答案:

答案 0 :(得分:2)

我建议你使用一个好的ruby HTML / XML解析库,例如HpricotNokogiri

如果您需要登录该网站,您可能会对WWW::Mechanize等图书馆感兴趣。

代码示例:

require "open-uri"
require "hpricot"
require "nokogiri"

url = "http://itproffs.se/forumv2"

# Using Hpricot 
doc = Hpricot(open(url))
doc.search("//a[@target='_blank']").each { |user| puts "found #{user.inner_html}" }

# Using Nokogiri
doc = Nokogiri::HTML(open(url))
doc.xpath("//a[@target='_blank']").each { |user| puts "found #{user.text}" }

答案 1 :(得分:1)

您的代码有几个问题

  1. 我不知道你的意思是什么

    {链接}。但是如果你想在链接上添加一个'#'字符,请确保

    你用引号包装它。即 “#{链接}”
  2. String.scan接受一个块。用它 循环比赛。
  3. 您尝试访问的页面 没有返回任何链接 正则表达式无论如何都会匹配。
  4. 这是可行的:

    require 'open-uri'
    url = "http://itproffs.se/forumv2/"
    open(url) do |page|
        content = page.read()
        content.scan(/<a href="(.*?)" target="_blank">/) do |match|
                match.each { |link| puts link}
            end
    end
    

    我确信,有更好的方法可以做到这一点。但这应该有用。

    希望有所帮助