我正在尝试编写一个screenscraper,我想下载一个网站的主页。
当我在浏览器上查看页面源代码时,我没有看到整个HTML代码。我如何确保在浏览器中查看源代码时加载所有内容?
# Required Gems
require 'rubygems' # Loads gems
require "nokogiri" # Nokogiri
require "open-uri" # For Nokogiri
require "chronic" # For time parsing
require "cgi" # For parsing urls
require 'net/http' # For image downloading
URL = URI.parse("http://www.gocrimson.com/landing/index")
hBOList = Nokogiri::HTML(open(URL))
答案 0 :(得分:3)
浏览器的源视图不一定与请求的HTML文件本身相匹配,因为Ajax被用于在原始的,请求的页面加载之后加载页面块。
如果使用JavaScript和Ajax,则不能使用常规方法来检索页面的源,除非您解码整个内容链并在Ruby代码中重新创建它们。
或者,您可以使用Ruby可以与之交谈的浏览器,告诉它加载初始页面,然后在浏览器中触发JavaScript的操作,浏览器将加载其他内容,然后您的代码可以提取并执行你想要什么。为此,您应该查看Watir或其衍生产品之一。
答案 1 :(得分:0)
的作用:
require 'open-uri'
File.open("page_test.txt","w"){|f| f << open("http://www.gocrimson.com/landing/index").read}
复制所需页面的全部内容?如果是这样的话,Nokogiri在某个地方掉了一些东西和/或那些人在页面渲染后通过JavaScript加载东西,如果没有,你的解析代码会很有趣。
答案 2 :(得分:0)
我认为某些内容是通过某个按钮点击或某些操作后通过ajax调用加载的。如果你知道你想要的东西以及这样做的动作。然后你可以看到mechanize。 Mechanize内部使用Nokogiri,它有助于加载需要采取某些行动的页面。
答案 3 :(得分:0)
Hisako和redcup你应该像上面提到的Tin Man一样尝试watir。类似的东西:
require 'rubygems'
require 'watir-webdriver'
browser = Watir::Browser.new
browser.goto "http://www.gocrimson.com/landing/index"
puts browser.html
应该做你想做的事。