如何从HTML解析/下载样式表

时间:2015-04-20 09:45:10

标签: css ruby nokogiri

我正在通过以下方式下载HTML页面的一部分:

require 'nokogiri'
require 'open-uri'

doc = Nokogiri::HTML(open('https://example.com/index.html'))
wiki = doc./('//*[@id="wiki"]/div[1]')

我需要样式表才能正确显示它。它们包含在标题中,如下所示:

<!DOCTYPE html>
<html lang="en" class="">
    <head>
    ...
    <link href="https://example.com/9f40a.css" media="all" rel="stylesheet" />
    <link href="https://example.com/4e5fb.css" media="all" rel="stylesheet" />
    ...
  </head>
  ...

他们的命名可以改变。如何解析/下载样式表的本地副本?

2 个答案:

答案 0 :(得分:3)

这样的事情:

require 'open-uri'
doc.css("head link").each do |tag|
  link = tag["href"]
  next unless link && link.end_with?("css")
  File.open("/tmp/#{File.basename(link)}", "w") do |f|
    content = open(link) { |g| g.read }
    f.write(content)
  end
end

答案 1 :(得分:1)

我不是红宝石专家,但您可以按照以下步骤进行操作

  • 您可以使用.scan(...)类型提供的String方法来解析并获取.css文件名。 scan方法将返回一个数组样式表文件名。在scan here
  • 上查找更多信息
  • 然后使用Net::HTTP.get(...)下载并存储文件,例如here