我目前正在使用Ruby on Rails (Ruby:2.2.1, Rails:4.2.1)建立一个网站,并希望从特定网站提取数据,然后显示它。我使用Nokogiri获取网页的内容。我要找的是取本网站的所有页面,并得到他们的内容。
我的代码下面:
doc = Nokogiri::HTML(open("www.google.com").read)
puts doc.at_css('title').text
puts doc.to_html
这是你需要的一个非常近似的要点:
class Parser
attr_accessor :pages
def fetch_all(host)
@host = host
fetch(@host)
end
private
def fetch(url)
return if pages.any? { |page| page.url == url }
parse_page(Nokogiri::HTML(open(url).read))
end
def parse_page(document)
links = extract_links(document)
pages << Page.new(
url: url,
title: document.at_css('title').text,
content: document.to_html,
links: links
)
links.each { |link| fetch(@host + link) }
end
def extract_links(document)
document.css('a').map do |link|
href = link['href'].gsub(@host, '')
href if href.start_with?('/')
end.compact.uniq
end
end
class Page
attr_accessor :url, :title, :html_content, :links
def initialize(url:, title:, html_content:, links:)
@url = url
@title = title
@html_content = html_content
@links = links
end
end