如何在Ruby中获取网页的HTML源代码

时间:2010-11-18 16:34:08

标签: html ruby

在Firefox或Safari等浏览器中,如果网站处于打开状态,我可以右键单击该页面,然后选择“查看页面源”或“查看源”等内容。这显示了页面的HTML源代码。

在Ruby中,是否有一个函数(可能是一个库)允许我将这个HTML源存储为变量?像这样:

source = view_source(http://stackoverflow.com)

源将是此文本:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Stack Overflow</title>
etc

8 个答案:

答案 0 :(得分:27)

使用Net::HTTP

require 'net/http'

source = Net::HTTP.get('stackoverflow.com', '/index.html')

答案 1 :(得分:16)

require 'open-uri'
source = open(url){|f|f.read}

UPD:更现代的语法

require 'open-uri'
source = open(url, &:read)

答案 2 :(得分:13)

require 'open-uri'
source = open(url).read

简短,简单,甜蜜。

答案 3 :(得分:7)

是的,就像这样:

require 'open-uri'

open('http://stackoverflow.com') do |file|
    #use the source Eric
    #e.g. file.each_line { |line| puts line }
end

答案 4 :(得分:3)

您可以使用内置Net::HTTP

>> require 'net/http'
>> Net::HTTP.get 'stackoverflow.com', '/'

或“Equivalent of cURL for Ruby?”中建议的几个库中的一个。

答案 5 :(得分:3)

您可能感兴趣的另一件事是Nokogiri。它是一个非常容易使用的HTML,XML等解析器。他们的头版有一些示例代码,可以帮助您入门,看看它是否适合您的需求。

答案 6 :(得分:3)

require 'mechanize'

agent = Mechanize.new
page = agent.get('http://google.com/')

puts page.body

然后你可以用机械化做很多其他很酷的东西。

答案 7 :(得分:1)

如果您安装了cURL,则可以简单地:

url = 'http://stackoverflow.com'
html = `curl #{url}`

如果您想使用纯Ruby,请查看Net::HTTP库:

require 'net/http'
stack = Net::HTTP.new 'stackoverflow.com'
# ...later...
page = '/questions/4217223/how-to-get-the-html-source-of-a-webpage-in-ruby'
html = stack.get(page).body