[英]Ruby script with mechanize and nokogiri
因此,基本上我早些時候問了一個問題,並得到了一個可以解決該問題的答案,但是現在我意識到我需要更多幫助,因為我花了最后幾個小時嘗試解決此問題,但始終遇到“ nil:Nilclass:錯誤。基本上我需要去通過該網站上列出的每個節目(因此通過每個字母以及每個頁面所包含的每個頁面),並獲得以下信息:1.節目標題(我已經完成了這一部分)2.然后復制每個節目的頁面網址,然后在其末尾添加“ / episodes /”,或單擊節目,然后單擊情節選項卡並復制該網址。
這是我到目前為止的內容:
require 'mechanize'
shows = Array.new
agent = Mechanize.new
agent.get 'http://www.tv.com/shows/sort/a_z/'
agent.page.search('//div[@class="alphabet"]//li[not(contains(@class, "selected"))]/a').each do |letter_link|
agent.get letter_link[:href]
agent.page.search('//li[@class="show"]/a').each { |show_link| shows << show_link.text }
while next_page_link = agent.page.at('//div[@class="_pagination"]//a[@class="next"]') do
agent.get next_page_link[:href]
agent.page.search('//li[@class="show"]/a').each { |show_link| shows << show_link.text }
end
end
require 'pp'
pp shows
因此最終結果可能類似於以下內容:標題:權力的游戲URL: http : //www.tv.com/shows/game-of-thrones/episodes/
我已經嘗試了所有方法(甚至是從頭開始編寫),但似乎並不能添加額外的部分,因此我希望這里有人能夠幫助我。 謝謝
這個怎么樣
require 'mechanize'
shows = {}
base_uri = "http://www.tv.com/"
agent = Mechanize.new
agent.get 'http://www.tv.com/shows/sort/a_z/'
agent.page.search('//div[@class="alphabet"]//li[not(contains(@class, "selected"))]/a').each do |letter_link|
agent.get letter_link[:href]
letter = letter_link.text.upcase
shows[letter] = agent.page.search('//li[@class="show"]/a').map{ |show_link| {show_link.text => base_uri << show_link[:href].to_s << 'episodes/'} }
while next_page_link = agent.page.at('//div[@class="_pagination"]//a[@class="next"]') do
agent.get next_page_link[:href]
shows[letter] << agent.page.search('//li[@class="show"]/a').map{ |show_link| {show_link.text => base_uri << show_link[:href].to_s << 'episodes/'} }
end
shows[letter].flatten!
end
puts shows
這將創建以下結構Hash[letter] => Array[{ShowName => LinktoEpisodes}]
例:
{"A"=>[{"A Show"=>"http://www.tv.com/shows/a-show/episodes/"},{"Another Show"=>"http://www.tv.com/shows/another-show/episodes/"},...],"B"=>[B SHOWS....],....}
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.