无法使用Nokogiri刮页

时间:2014-09-24 06:12:03

标签: ruby-on-rails ruby nokogiri screen-scraping

我试图使用Nokogiri来抓取这个页面:http://www.tudou.com/home/_48712163/item

目标是此页面中的视频信息(titl,href等)

HTML是:

<div class="pack pack_album2" data-stat-role="ck" data-stat-href="http://www.tudou.com/programs/view/e3jLsLPGct0/"></div>

我的目标是.pack属性:

url = 'http://www.tudou.com/home/_48712163/item'
doc = Nokogiri::HTML(open(url) )
puts doc.css("title").text
doc.css(".pack").each do |item|
   #get video info
  title = item.css(".txt a")[0]['title']
  href = item.at(".txt a")[0]['href']
  puts title
  puts href
end

但是,返回的结果表明.pack为零级。

事实上,我尝试puts doc.css(".page-container").to_s.page-container.pack的父div。返回结果显示内部没有.pack

如何获取.pack的内容?

2 个答案:

答案 0 :(得分:1)

您需要加载JavaScript。如果您习惯使用JavaScript,我建议使用Phantomjs。如果Ruby对您来说更容易,您可以使用Watir:

require 'watir-webdriver'
require 'nokogiri'

$browser = Watir::Browser.start "http://www.tudou.com/home/_48712163/item"

$page_html = Nokogiri::HTML.parse($browser.html)

video_info = $page_html.css("#xpath")

你可以使用无头宝石运行这个无头,取决于你有什么样的操作系统。

require 'watir-webdriver'
require 'nokogiri'
require 'headless'

headless = Headless.new

headless.start 
$browser = Watir::Browser.start "http://www.tudou.com/home/_48712163/item"

$page_html = Nokogiri::HTML.parse($browser.html)

video_info = $page_html.css("#xpath")

答案 1 :(得分:0)

网站使用Ajax加载内容。

您可以在http://js.tudouui.com/v3/dist/js/page/home/v2/main_33.js

中查看Ajax调用并处理HTML内容

复制并找到“pack pack_album2”。 使用Nokogiri无法获取Ajax内容。