2016-07-31 3 views
0

Я очищаю много данных с веб-сайта UCAS (используя механический камень) и большую часть его работаю, но когда я пытаюсь вытащить требования к входу из Шотландии, я сталкиваюсь с некоторыми неприятностями. Ниже приведен код, который я использовал, чтобы найти и царапать предъявляемые требования:Rails Механизировать результаты запроса/очистки datascrape

 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) 

Что это возвращается, однако, не так уж велико. Вместо того, чтобы возвращать только один результат либо для шотландских Highers или Advanced Highers тянет их обоих, и выводит их как таковые:

BBB Typical offerAABB Typical offer 

Есть в любом случае либо зоны и только тянуть ГЭБ или AABB или путь к разделите его с помощью gsub или что-то, чтобы отображать только AABB или BBB? Любая помощь приветствуется.

Ссылка на пример страницы, где эти данные будут выведены из: http://search.ucas.com/course/entryrequirements/448323/anthropology?Vac=2&AvailableIn=2016&IsFeatherProcessed=True&ret=providers#coursedetailsmenu

+0

Пожалуйста, прочтите «[ask]» и «[mcve]». Нам нужно увидеть минимальный код и минимальные данные, которые демонстрируют проблему _ в самом вопросе_. –

+0

'course_details.search ('ul.details_tabs a'). First' лучше написан как' course_details.at ('ul.details_tabs a') '. –

ответ

0

Проблема заключается в том:

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

Не используйте text с NodeSet, что и search возвращается. См. Документацию для NodeSet#text и Node#text.

Вам необходимо перебрать найденные вами узлы и извлечь текст из каждого. Обычно мы делаем это с использованием search('some selector').map(&:text), который возвращает массив текста.

 Смежные вопросы

  • Нет связанных вопросов^_^