2016-07-31 32 views
0

Ich kratze eine Menge Daten von der UCAS-Website (mit Mechanize Gem) und habe das meiste funktioniert, aber wenn ich versuche, die Einreiseanforderungen aus Schottland zu ziehen, stoße ich in Schwierigkeiten. Unten ist der Code, den ich verwendet habe, die Zugangsvoraussetzungen zu finden und zu kratzen:Rails Mechanize datascrape Abfrage/Reinigung Ergebnisse

 entry_link = course_details.search('ul.details_tabs a').first 
     if entry_link 

     # If there is a link to a qualification page for the course go to that 
     details_info[:entry] = process_entry(@mechanize.get(entry_link["href"])) 
     end 
end 


def process_entry(entry_req) 
    entry_array = [] 
    entry_info = {} 

     # Sets all data in hash 
     @requirements = entry_req.search('li.qual-element.qual_range').text.strip 
     entry_info[:req]   = @requirements 

     #Pushes to array, and prints  
     entry_array.push(entry_info) 
     print_entry_info(entry_info) 

Was gibt jedoch nicht so toll ist. Anstatt nur ein Ergebnis der Rückkehr entweder Scottish Highers oder Advanced Highers zieht es beide und gibt sie als solche:

BBB Typical offerAABB Typical offer 

Gibt es trotzdem zu jeder Zone in und nur die BBB oder die AABB oder einen Weg ziehen, um strippen Sie es mit gsub oder etwas ab, um nur die AABB oder die BBB anzuzeigen? Jede Hilfe wird geschätzt.

Link zu einer Beispielseite, wo solche Daten gezogen werden würde: http://search.ucas.com/course/entryrequirements/448323/anthropology?Vac=2&AvailableIn=2016&IsFeatherProcessed=True&ret=providers#coursedetailsmenu

+0

Bitte lesen Sie "[ask]" und "[mcve]". Wir müssen den minimalen Code und die minimalen Daten sehen, die das Problem in der Frage selbst zeigen. –

+0

'course_details.search ('ul.details_tabs a'). First' ist besser geschrieben als' course_details.at ('ul.details_tabs a') '. –

Antwort

0

Das Problem ist:

entry_req.search('li.qual-element.qual_range').text 

nicht text mit einem nodeset Verwenden Sie, was was ist search zurückkehrt. Siehe Dokumentation für NodeSet#text und Node#text.

Sie müssen über Ihre gefundenen Knoten iterieren und den Text daraus extrahieren. Normalerweise machen wir das mit search('some selector').map(&:text), die ein Array von Text zurückgibt.