`
wutao8818
  • 浏览: 616427 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Hpricot

    博客分类:
  • ruby
阅读更多
A Fast, Enjoyable HTML Parser for Ruby

http://code.whytheluckystiff.net/hpricot/-->http://wiki.github.com/why/hpricot

#!ruby
 doc.search("//p[@class='posted']")
 #=> #<Hpricot:Elements[{p ...}, {p ...}]>

#!ruby
 (doc/"p.posted")
 #=> #<Hpricot:Elements[{p ...}, {p ...}]>


查找所有p元素 并且 class 为 posted的元素

#!ruby
 doc.at("body")['onload']
返回第一个元素,最常见的愿意是直接使用元素,读写元素属性。

#!ruby
 (doc/"#elementID").inner_html
 #=> "..<b>contents</b>.."
获得元素内容。

#!ruby
 (doc/"#elementID").first.inner_html
 #=> "..<b>contents</b>.."


如果匹配很多,可以是用.first 访问第一个元素。


#!ruby
 (doc/"#elementID").to_html
 #=> "<div id='elementID'>...</div>"
获得整个元素,包括外面的元素。


#!ruby
 (doc/"p/a/img").each do |img|
   puts img.attributes['class']
 end
所有的搜索返回的都是元素集合。可以循环遍历。

#!ruby
 doc.search("div.entryPermalink").at("a")
返回class为entryPermalink 第一个div,第一个a元素






#!ruby
 # find all paragraphs.
 elements = doc.search("/html/body//p")
 # continue the search by finding any images within those paragraphs.
 (elements/"img")
 #=> #<Hpricot::Elements[{img ...}, {img ...}]>


继续搜索。

#!ruby
 # the xpath version  			XPATH方式
 (doc/"/html/body//p//img")
 # the css version 			CSS方式
 (doc/"html > body > p img")
 # ..or symbols work, too!  		标记方式
 (doc/:html/:body/:p/:img)


#!ruby
 (doc/"span.entryPermalink").each do |span|
   span.attributes['class'] = 'newLinks'
 end
 puts doc


循环编辑
#!ruby
 doc.search("div.entryPermalink").search("a") do |link|
   pp link
 end.search("span") do |span|
   pp span
 end


搜索所有 class 为 entryPermalink的div元素中的a 元素。遍历
然后搜索所有 class 为 entryPermalink的div元素 中的span元素,遍历 打印。



Using CSS Selectors  CSS选择器
#!ruby
 doc = Hpricot(open("qwantz.html"))
 (doc/'div img[@src^="http://www.qwantz.com/comics/"]')
   #=> Elements[...]


找到div里面img 元素中 src属性为http://www.qwantz.com/comics/的元素。

#!ruby
 puts doc.search('#menu').inner_html


找到id为menu的元素,显示内部数据

#!ruby
 puts doc.search("span").length


得到span类型的元素,length显示了数组的长度
#!ruby
 puts (doc/:span).length


找到span元素,与上面的作用相同

Selecting by Class
#!ruby
 doc.search(".entryTitle").each do |title|
   puts title.inner_html
 end


找到class属性为entryTitle的所有元素

#!ruby
 (doc/"div.entryTitle").remove








XPATH也可以是实现类似的目标,//div[@class='entryTitle']
但是css方式似乎更出众。例如一个元素有多个class属性,那XPATH就无能为力了。

<div class="entryTitle dark">

#!ruby
 (doc/"div[@class~='entryTitle']").remove



#!ruby
 (doc/"div.entryPermalink a").empty
找到所有的class 为 entryPermalink 的div元素 下的 a元素

如果用css选择器栈方式来实现是
#!ruby
 (doc/"div.entryPermalink"/"a").empty



#!ruby
 doc.search("div.entryPermalink > a").
   prepend("<b>found you on the left</b>").
   append("<b>found you on the right</b>")


如果希望搜索的对象是 直接子元素,需要 > 符号。


#!ruby
 doc.search("input[@checked]")


搜索input字段type为checked

#!ruby
 doc.at("a[@name='part_two']")


搜索name属性为part_two的 a 对象


#!ruby
 doc.search("*[@onclick*='document.location']").each do |ele|
   ele.remove_attribute('onclick')
 end
搜索所有onclick属性为document.location的对象。

#!ruby
 doc.search("p:not(.blue)")


非选择符。P元素class属性不是blue的元素集合


Searching Hpricot With XPath

#!ruby
 doc = Hpricot(URI.parse("http://we-make-money-not-art.com/").read)
 (doc/'//div/img')
   #=> Elements[...]


目前有些限制。
/ 开头的搜索可以使用xpath方式。



分享到:
评论

相关推荐

    hpricot:Hpricot已经结束。 请考虑使用替代品,例如nokogiri

    Hpricot已经结束。 在多年以来一直缺乏适当的珠宝维护者之后,人们决定最终关闭有关hpricot的书籍。 大多数用户已迁移到替代方案,并且根本没有时间或精力继续使用当前代码库。 如果您觉得自己有时间并希望接手,...

    Hpricot API for Ruby

    Hpricot 的API 文档 Hpricot 的API 文档

    hpricot+tmail

    在Ruby社区中,hpricot被广泛用来抓取网页内容,提取数据,或者进行网页自动化任务。尽管后来有了更现代的替代品如Nokogiri,但hpricot因其简洁的API和对老式HTML的宽容性而仍然有其价值。hpricot通过提供类似于...

    hpple:受Hpricot启发,用于Objective-C的XMLHTML解析器

    受到为什么幸运的的。学分Hpple由Geoffrey , 和。...安装打开您的Xcode项目和Hpple项目。 将“ Hpple”目录拖到您的项目中。 将libxml2.2.dylib框架添加到您的项目中,并按照描述搜索路径即将推出更多文档和简短的...

    downmark_it.zip

    downmark_it 是一个用来将 HTML 转成 Markdown 格式的 Ruby 开发包。依赖于 Hpricot 标签:downmark

    redmine_airbrake_server:一个 Redmine 插件,使其能够接收应用程序错误通知 Airbrake 风格

    安装 hpricot gem,然后将插件安装到 Redmine。 现在转到管理 -&gt; 设置 -&gt; 收到的电子邮件,如有必要,选中启用 WS 接收电子邮件并生成 API 密钥。 这是您在下一步配置通知程序时需要的密钥。 客户端配置 对于 Rails ...

    grunt-email-code:用于自动处理电子邮件的精简版。 由lee munroe创建

    gem install premailer hpricot nokogiri 安装SASS sudo gem安装sass 笨拙的电子邮件设计工作流程 设计和测试电子邮件是一件很痛苦的事情。 HTML表,内联CSS,要测试的各种设备和客户端,以及对最新Web标准的各种...

    grunt-email-boilerplate:用于创建电子邮件的Grunt模板

    cli&gt; = 0.1.7和Grunt&gt; = 0.4.2( npm install grunt-cli -g ) Ruby&gt; = 1.9.3() 指南针&gt; = 0.12.2( gem install compass ) Premailer&gt; = 1.8.0( gem install premailer ,大多数情况下, gem install hpricot ...

    ruby_webscraping_talk_source:Ruby的Web抓取对话

    11. **网页解析**:除了Nokogiri,还有其他解析库如`Hpricot`,虽然不如Nokogiri活跃,但在某些场景下也足够使用。 12. **Ethical Scraping**:尊重网站的robots.txt文件,避免抓取受限制的内容,合理设置抓取频率...

    rb2-examples:kimsQ Rb 2扩展

    Ruby有很多库,如Nokogiri和Hpricot,能够解析和操作HTML文档。 **文件名称列表:rb2-examples-master** 暗示了这是一个Git仓库的克隆版本,通常`master`分支代表项目的主线开发。在这个目录下,你可能会找到如...

Global site tag (gtag.js) - Google Analytics