为什么 OpenURI return 不同于原始来源的 HTML 内容?
Why does OpenURI return different HTML content from the original source?
我正在尝试使用 OpenUri 和 Nokogiri 从 HTML 源获取样式内容。
require 'open-uri'
require 'nokogiri'
require 'css_parser'
url = open('https://google.com')
html = Nokogiri::HTML(url)
css = CssParser::Parser.new
css.add_block!(html.search('style#gstyle').text)
此 returns nil
,但 Google 页面的 HTML 包含 id="gstyle"
。这是输出结果的图像:
- 为什么本例中的 Google HTML 页面与 OpenUri returns 的页面不同?
- 如何找到这个标签
style#gstyle
?
- 为什么 Firebug 看到正确的 HTML 文档而 OpenUri 没有?
Google 根据代理字符串为不同的客户端呈现不同的页面,而代理字符串是服务器关于哪种客户端正在访问该页面的唯一线索。 open-uri
默认声明自己为 "Ruby"。如果您使用明显自动化的脚本访问,您将获得与使用浏览器访问时不同的页面。
试试这个:
url = open('https://google.com', "User-Agent" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36")
我正在尝试使用 OpenUri 和 Nokogiri 从 HTML 源获取样式内容。
require 'open-uri'
require 'nokogiri'
require 'css_parser'
url = open('https://google.com')
html = Nokogiri::HTML(url)
css = CssParser::Parser.new
css.add_block!(html.search('style#gstyle').text)
此 returns nil
,但 Google 页面的 HTML 包含 id="gstyle"
。这是输出结果的图像:
- 为什么本例中的 Google HTML 页面与 OpenUri returns 的页面不同?
- 如何找到这个标签
style#gstyle
? - 为什么 Firebug 看到正确的 HTML 文档而 OpenUri 没有?
Google 根据代理字符串为不同的客户端呈现不同的页面,而代理字符串是服务器关于哪种客户端正在访问该页面的唯一线索。 open-uri
默认声明自己为 "Ruby"。如果您使用明显自动化的脚本访问,您将获得与使用浏览器访问时不同的页面。
试试这个:
url = open('https://google.com', "User-Agent" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36")