Cześć.
Mam taki problem. Aktualnie przerabiam taki kurs Ruby i dział “Projekty praktyczne > WebCrawler”.
Piszę robota indeksującego który będzie chodził po stronie udając przeglądarkę i zbierał informację na temat filmów. Informację na temat filmów ten robot miałby pobierać ze strony imdb.com z takiej podstrony (i później z tabeli ) “top 250”. Tak przynajmniej zostało odtworzone w filmie.
Problem w tym tej podstrony “top 250” nie ma na aktualnej stronie jak w tym kursie:
http://s2.ifotos.pl/img/Przechwyt_apsxxsw.png
Noi myślałem żeby te informacje pobrać np z tej podstrony:
http://www.imdb.com/chart/boxoffice?pf_rd_m=A2FGELUUNOQJNL&pf_rd_p=2495768522&pf_rd_r=0AJ302ZZEZAX7AWRXRP0&pf_rd_s=right-7&pf_rd_t=15061&pf_rd_i=homepage&ref_=hm_cht_hd
Wpisuję
require 'mechanize' agent = Mechanize.new #Tworzenie 'wirtalnej przeglądarki ktora bd chodzic po stronie' main_page = agent.get 'http://imdb.com' #wczytanie strony głownej list_page = main_page.link_with(text: "Now Playing (Box Office)").click rows = list_page.root.css(".lister-list tr") puts rows.size
rows = list_page.root.css(".lister-list tr")
Jednak nie mogę w ten sposób pobrać informacji z tabeli bo jest błąd w tej linijce:
rows = list_page.root.css(".lister-list tr")
W kursie jest tak jak linijke wyżej w web inspector a w tej stronie aktualnej w web inspector zamiast tego:
< tbody class=“lister-list”>
jest tak :
<tbody> == $0
@@Mam nadzieję że zrozumieliście ten problem który napotkałem chociaż napisalem to dość zawile @@
A mi się wydaje, że ta strona to raczej link z tekstem “Top Rated Movies”. Twój skrypt działa z tym linkiem.
require 'mechanize'
agent = Mechanize.new
main_page = agent.get 'http://imdb.com'
list_page = main_page.link_with(text: "Top Rated Movies").click
rows = list_page.root.css(".lister-list tr")
puts rows.size
$ ruby imdb.rb
250
1 Like
Faktycznie! Małe niedopatrzenie
Napisałem to tak zawile i niezrozumiale że myślałem że nikt nie da rady pomóc a tu …
Bardzo dziękuję za pomoc!
Tylko miałbym jeszcze jedno pytanie. Na stronie dużo się pozmieniało a ja jeszcze w selektorach taki ogarnięty nie jestem niestety ://
require 'csv'
class Movie < Struct.new(:title, :year, :rating, :director); end
movies = []
agent = Mechanize.new
main_page = agent.get 'http://imdb.com'
list_page = main_page.link_with(text: "Top Rated Movies").click
rows = list_page.root.css(".lister-list tr")
rows.take(7).each do |row|
title = row.at_css(".titleColumn a").text.strip
rating = row.at_css(".ratingColumn strong").text.strip
movie_page = list_page.link_with(text: title).click
year = movie_page.root.at_css(".header .nobr a").text.strip
director = movie_page.root.at_css("div[itemprop=director] a span").text.strip
movie = Movie.new(title, year, rating, director)
movies << movie
end
CSV.open("top7.csv","w", col_sep: ";") do |csv|
csv << ["Tytuł", "Rok", "Ocena", "Rezyser"]
movies.each do |movie|
csv << [movie.title, movie.year, movie.rating, movie.director]
end
end
Mam problem z załadowaniem roku premiery i reżysera… co robię tutaj źle :/?