加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用Ruby和Nokogiri的网页爬虫例子,导出RSS种子

发布时间:2020-12-17 04:11:21 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 # encoding: utf-8require 'thread'require 'nokogiri'require 'open-uri'require 'rss/maker'$result=Queue.newdef extract_readme_header(no,name,u

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

# encoding: utf-8
require 'thread'
require 'nokogiri'
require 'open-uri'
require 'rss/maker'

$result=Queue.new
def extract_readme_header(no,name,url) 
  frame = Nokogiri::HTML(open(url))
  return unless frame
  readme=$url+frame.css('frame')[1]['src']
  return unless readme
  open(readme) do |f|
    doc = Nokogiri::HTML(f.read)
    text=doc.css("div#content div#filecontents p")[0..4].map { |c| c.content }.join(" ").strip
    return if text.length==0
    if text !~ /(rails)|(activ_)/i
      puts "========= #{no} #{name} : #{text[0..50]}"
      date = f.last_modified
      $result << [no,readme,date,text]
    end
  end
rescue
  puts $!.to_s
end

def make_rss(items)
  RSS::Maker.make("2.0") do |m|
    m.channel.title = "GtitHub recently updated projects"
    m.channel.link = "http://localhost"
    m.channel.description = "GitHub recently updated projects"
    m.items.do_sort = true
    items.each do |no,url,descr|
      i = m.items.new_item
      i.title = name
      i.link = url
      i.description=descr
      i.date = date
    end 
  end
end

############################## M A I N ########################

############# Scan list of recent project

lth=[]
$url="http://rdoc.info" 
puts "get url #{$url}..."
doc = Nokogiri::HTML(open($url))
doc.css('ul.libraries')[1].css('li').each_with_index do |li,i|
  aname =li.css('a').first
  name=aname.content
  purl=$url+aname['href']
  lth << Thread.new(i,purl) { |j,n,u| extract_readme_header(j,u)  }
end

################ wait all readme are read

lth.each { |th| th.join() }

################ dequeue results and sort them by date descending

result=[]
result << $result.shift while $result.size>0
result.sort!  { |a,b| a[0] <=> b[0] }


################ format results in rss

File.open("RubyFeeds.rss","w") do |file|
  file.write make_rss(result)
end

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读