Нокогири разбор метаслов - PullRequest
       6

Нокогири разбор метаслов

1 голос
/ 18 августа 2011

Я знаю, что этот вопрос задавался ранее, но я не могу получить проанализированный результат.Я пытаюсь разобрать мета-слова, используя nokogiri. Может ли кто-нибудь указать на мою ошибку?

keyword = []
meta_data = doc.xpath('//meta[@name="Keywords"]/@content')                                         #parsing for keywords
meta_data.each do |meta|
  keyword << meta.value
end
key_str=keyword.join(",")

Я также пытался запустить это в irb, но ключевое слово возвращает ноль.

Вот как я использовал его в irb

 require 'rubygems'  
 require 'nokogiri'
 doc = Nokogiri::HTML("www.google.com") 

уже пробовал альтернативы из других сообщений stackoverflow, таких как
Nokogiri html parsing question но бесполезноони все еще возвращают ноль.Я предполагаю, что я делаю что-то не так.

1 Ответ

3 голосов
/ 19 августа 2011
  1. www.google.com не имеет мета-ключевых слов в источнике.Посмотреть источник на странице, чтобы убедиться в этом.Поэтому, даже если бы все остальное прошло идеально, вы все равно не получили бы результатов.

  2. Результат doc = Nokogiri::HTML("www.google.com") равен

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
    <html><body><p>www.google.com</p></body></html>
    

    Если вы хотите получить содержимое URL-адреса, вы хотите использовать что-то вроде:

    require 'open-uri'
    doc = Nokogiri::HTML( open('http://www.google.com' ) )
    
  3. Если вы получаете действительную страницу HTML и используете правильный регистр на keywords в соответствии с источником, он отлично работает.Вот пример из моего сеанса IRB, извлекающий страницу из одного из приложений на моем сайте, который использует name="keywords" вместо name="Keywords":

    irb(main):001:0> require 'open-uri'
    #=> true
    irb(main):002:0> require 'nokogiri'
    #=> true
    irb(main):003:0> url = "http://pentagonalrobin.phrogz.net/choose"
    #=> "http://pentagonalrobin.phrogz.net/choose"
    irb(main):04:0> doc = Nokogiri::HTML( open(url) ); nil # don't show doc here
    #=> nil
    irb(main):005:0> doc.xpath('//meta[@name="keywords"]/@content').map(&:value)
    #=> ["team schedule free round-robin league"]
    
...