ruby
  • nokogiri
  • 2010-08-09 135 views 4 likes 
    4

    我無法弄清楚爲什麼我無法通過nokogiri正確解析關鍵字。在以下示例中,我的href鏈接文本功能正常工作,但無法弄清楚如何拉取關鍵字。Nokogiri html解析問題

    這是代碼我迄今:

    .....

    doc = Nokogiri::HTML(open("http://www.cnn.com")) 
    doc.xpath('//a/@href').each do |node| 
    #doc.xpath("//meta[@name='Keywords']").each do |node| 
    
    puts node.text 
    

    ....

    這使得成功在所有頁面中的A HREF文字,但是當我嘗試將它用於關鍵字時,它不顯示任何內容。我已經嘗試了幾次這樣的變化,但沒有運氣。我假設節點後的「.text」標註是錯誤的,但我不確定。

    我很抱歉這段代碼很粗糙,我正盡我最大努力在這裏學習。

    +0

    請閱讀「[mcve]」。證明問題的最小輸入是多少?不要要求我們創造我們自己的。你必須幫助我們幫助你。通過這樣做,你可以幫助那些在未來尋找類似解決方案的人,這就是Stack Overflow的原因。 – 2016-09-14 00:54:01

    回答

    6

    你是對的,問題是texttext返回開始標記和結束標記之間的文本。由於元標籤爲空,因此會爲您提供空字符串。您需要改爲「content」屬性的值。

    doc.xpath("//meta[@name='Keywords']/@content").each do |attr| 
        puts attr.value 
    end 
    

    既然你知道,有將只有一個meta標記名稱爲「關鍵字」,你實際上並不需要通過循環的結果,但可直接採取的第一項是這樣的:

    puts doc.xpath("//meta[@name='Keywords']/@content").first.value 
    

    但是,請注意,如果沒有名稱爲「content」的元標記,則會導致錯誤,因此第一個選項可能更可取。

    +0

    謝謝!我一直在尋找相當長的一段時間,看看在哪裏可以找到這些定義。你能告訴我我應該看的文件嗎? – paradoxic 2010-08-09 16:58:37

    +1

    在研究這樣的問題時,我幾乎總是以irb身份。這可以讓你探索你找回的值,找出你需要做什麼調用或者你需要查詢哪些屬性。 – 2010-08-09 17:04:52

    +0

    謝謝Paul! – paradoxic 2010-08-09 18:27:20

    相關問題