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的书籍。 大多数用户已迁移到替代方案,并且根本没有时间或精力继续使用当前代码库。 如果您觉得自己有时间并希望接手,...
Hpricot 的API 文档 Hpricot 的API 文档
在Ruby社区中,hpricot被广泛用来抓取网页内容,提取数据,或者进行网页自动化任务。尽管后来有了更现代的替代品如Nokogiri,但hpricot因其简洁的API和对老式HTML的宽容性而仍然有其价值。hpricot通过提供类似于...
受到为什么幸运的的。学分Hpple由Geoffrey , 和。...安装打开您的Xcode项目和Hpple项目。 将“ Hpple”目录拖到您的项目中。 将libxml2.2.dylib框架添加到您的项目中,并按照描述搜索路径即将推出更多文档和简短的...
downmark_it 是一个用来将 HTML 转成 Markdown 格式的 Ruby 开发包。依赖于 Hpricot 标签:downmark
安装 hpricot gem,然后将插件安装到 Redmine。 现在转到管理 -> 设置 -> 收到的电子邮件,如有必要,选中启用 WS 接收电子邮件并生成 API 密钥。 这是您在下一步配置通知程序时需要的密钥。 客户端配置 对于 Rails ...
gem install premailer hpricot nokogiri 安装SASS sudo gem安装sass 笨拙的电子邮件设计工作流程 设计和测试电子邮件是一件很痛苦的事情。 HTML表,内联CSS,要测试的各种设备和客户端,以及对最新Web标准的各种...
cli> = 0.1.7和Grunt> = 0.4.2( npm install grunt-cli -g ) Ruby> = 1.9.3() 指南针> = 0.12.2( gem install compass ) Premailer> = 1.8.0( gem install premailer ,大多数情况下, gem install hpricot ...
11. **网页解析**:除了Nokogiri,还有其他解析库如`Hpricot`,虽然不如Nokogiri活跃,但在某些场景下也足够使用。 12. **Ethical Scraping**:尊重网站的robots.txt文件,避免抓取受限制的内容,合理设置抓取频率...
Ruby有很多库,如Nokogiri和Hpricot,能够解析和操作HTML文档。 **文件名称列表:rb2-examples-master** 暗示了这是一个Git仓库的克隆版本,通常`master`分支代表项目的主线开发。在这个目录下,你可能会找到如...