Ответ 1
Использовать Net:: HTTP:
require 'net/http'
source = Net::HTTP.get('stackoverflow.com', '/index.html')
В браузерах, таких как Firefox или Safari, с открытым веб-сайтом, я могу щелкнуть правой кнопкой мыши по странице и выбрать что-то вроде: "View Page Source" или "View Source". Это показывает источник 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
Использовать Net:: HTTP:
require 'net/http'
source = Net::HTTP.get('stackoverflow.com', '/index.html')
require 'open-uri'
source = open(url){|f|f.read}
UPD: более современный синтаксис
require 'open-uri'
source = open(url, &:read)
require 'open-uri'
source = open(url).read
короткий, простой, сладкий.
Да, вот так:
require 'open-uri'
open('http://stackoverflow.com') do |file|
#use the source Eric
#e.g. file.each_line { |line| puts line }
end
Еще одна вещь, которая может вас заинтересовать: Nokogiri. Это синтаксический анализатор HTML, XML и т.д., Который очень прост в использовании. На первой странице есть пример кода, который должен вас запустить и посмотреть, подходит ли он для того, что вам нужно.
require 'mechanize'
agent = Mechanize.new
page = agent.get('http://google.com/')
puts page.body
Затем вы можете делать много других интересных вещей с механизацией.
Вы можете использовать встроенный Net:: HTTP:
>> require 'net/http'
>> Net::HTTP.get 'stackoverflow.com', '/'
Или одна из нескольких библиотек, предложенная в Эквиваленте cURL для Ruby?".
Если у вас установлено cURL, вы можете просто:
url = 'http://stackoverflow.com'
html = `curl #{url}`
Если вы хотите использовать чистый Ruby, просмотрите библиотеку Net::HTTP
:
require 'net/http'
stack = Net::HTTP.new 'stackoverflow.com'
# ...later...
page = '/info/4217223/how-to-get-the-html-source-of-a-webpage-in-ruby'
html = stack.get(page).body