如何解析这个html标签?

时间:2013-09-09 03:28:54

标签: ruby html-parsing nokogiri

我正在使用nokogiri。我无法在a中获得p.user_info标记:

<p class="user_info"> 
    <a href="javascript:;" onClick="showSideView(this, 'login_id', 'user_name', 'ZmFubmlAaGFubWFpbC5uZXQ=', '');" title="[login_id]user_name">
        <img src='/cs2/data/member/fa/login_id.gif?dt=20130117095107' align='absmiddle' border='0'> of
    </a>
</p>

p_user_info = page.css("p.user_info")
puts p_user_info.css("a") # => []
puts p_user_info.css("a")[0] # => null
puts p_user_info.css("a").text # => ""

是否可以使用nokogiri在login_id代码中获取user_namea

===================================== 我发现了更重要的问题。

url = "http://clien.net/cs2/bbs/board.php?bo_table=park&wr_id=23895599"
html = open(url).read
puts html
# => ...
<p class="user_info"> <img src='/cs2/data/member/at/atlantis33.gif?dt=20130506110916' align='absmiddle' border='0'>님 </p>
...

我不知道为什么不能得到标签..

3 个答案:

答案 0 :(得分:0)

请尝试以下操作:

require 'nokogiri'

html = <<eoh
<p class="user_info"> 
    <a href="javascript:;" onClick="showSideView(this, 'login_id', 'user_name', 'ZmFubmlAaGFubWFpbC5uZXQ=', '');" title="[login_id]user_name">
        <img src='/cs2/data/member/fa/login_id.gif?dt=20130117095107' align='absmiddle' border='0'> of
    </a>
</p>
eoh

page = Nokogiri::HTML(html)
a = page.at_css("p.user_info a")
p a[:onclick].split(',')[1,2]
# => [" 'login_id'", " 'user_name'"]
p a[:onclick].split(',')[1,2].map { |x| x.gsub(/^[' ]+|[' ]+$/, '') }
# => ["login_id", "user_name"]

答案 1 :(得分:0)

require 'nokogiri'                                                              

a =%{<p class="user_info">                                                      
    <a href="javascript:;" onClick="showSideView(this, 'login_id', 'user_name', 'ZmFubmlAaGFubWFpbC5uZXQ=', '');" title="[login_id]user_name">
<img src='/cs2/data/member/fa/login_id.gif?dt=20130117095107' align='absmiddle' border='0'> of
</a>                                                            
</p>"}                                                          

html = Nokogiri::HTML(a)                                                        
link = html.at_css "a"                                                          
puts link.values[1].split[1]                                                    
puts link.values[1].split[2]

答案 2 :(得分:0)

回答我自己。 a标签仅在登录后才能看到。需要mechanize库。