Ruby - nokogiri,open-uri - 无法解析页面

时间:2016-01-19 17:06:27

标签: ruby web-scraping nokogiri screen-scraping open-uri

此代码适用于某些页面,例如klix.ba,但无法弄清楚为什么它不能为其他人工作。

没有错误可以解释出错的地方,没有。

如果put页面有效,这意味着我可以定位页面并解析它,为什么我不能获得单个元素?

require 'nokogiri'
require 'open-uri'


url = 'http://www.olx.ba/'

user_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7"


page = Nokogiri::XML(open(url,'User-Agent' => user_agent), nil, "UTF-8")

#puts page - This line work

puts page.xpath('a')

2 个答案:

答案 0 :(得分:1)

首先,为什么要将其解析为XML? 考虑到您的网页是HTML网站,以下内容应该是正确的:

page = Nokogiri::HTML(open(url,'User-Agent' => user_agent), nil, "UTF-8")

此外,如果您要删除所有链接(a - 标记),请按以下步骤操作:

page.css('a').each do |element|
   puts element
end

答案 1 :(得分:0)

如果您想要解析网页中的内容,则需要执行以下操作:

require 'nokogiri'
require 'open-uri'


url = 'http://www.olx.ba/'

user_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7"


page = Nokogiri::HTML(open(url,'User-Agent' => user_agent), nil, "UTF-8")

#puts page - This line work

puts page.xpath('a')

这里看一下Nokogiri文档

我建议的一件事是在代码中使用调试器断点(可能在分配page之后)。看看Pry-debugger gem。

所以我会做这样的事情:

 require 'nokogiri'
 require 'open-uri'
 require 'pry' # require the necessary library


    url = 'http://www.olx.ba/'

    user_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7"


    page = Nokogiri::HTML(open(url,'User-Agent' => user_agent), nil, "UTF-8")
    binding.pry # stop a moment in time in you code (break point)

    #puts page - This line work

    puts page.xpath('a')