Подтвердить что ты не робот

Как получить HTML-источник веб-страницы в Ruby

В браузерах, таких как 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
4b9b3361

Ответ 1

Использовать Net:: HTTP:

require 'net/http'

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

Ответ 2

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

UPD: более современный синтаксис

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

Ответ 3

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

короткий, простой, сладкий.

Ответ 4

Да, вот так:

require 'open-uri'

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

Ответ 5

Еще одна вещь, которая может вас заинтересовать: Nokogiri. Это синтаксический анализатор HTML, XML и т.д., Который очень прост в использовании. На первой странице есть пример кода, который должен вас запустить и посмотреть, подходит ли он для того, что вам нужно.

Ответ 6

require 'mechanize'

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

puts page.body

Затем вы можете делать много других интересных вещей с механизацией.

Ответ 7

Вы можете использовать встроенный Net:: HTTP:

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

Или одна из нескольких библиотек, предложенная в Эквиваленте cURL для Ruby?".

Ответ 8

Если у вас установлено 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