2013-11-16 5 views
0

Я пытаюсь соскрести спортивную страницу CBS для данных выстрела в НБА. Вот страница, с которой я начинаю работать и используя ее в качестве образца: http://www.cbssports.com/nba/gametracker/shotchart/[email protected]Ruby newb: как извлечь подстроку?

В источнике я нашел строку, содержащую все необходимые мне данные. Эта строка в исходном коде веб-страницы находится непосредственно под var CurrentShotData = new.

Что я хочу, это превратить эту строку в источник в строку, которую я могу использовать в ruby. Тем не менее, у меня проблемы с синтаксисом. Вот что у меня есть.

require 'nokogiri' 
require 'mechanize' 

a = Mechanize.new 
a.get('http://www.cbssports.com/nba/gametracker/shotchart/[email protected]') do |page| 
shotdata = page.body.match(/var currentShotData = new String\(\"(.*)\"\)\; var playerDataHomeString/m)[1].strip 
print shotdata 
end 

Я знаю, что я должен делать это неправильно ... это так кажется излишне сложным и на вершине, что он не работает для меня. Может ли кто-нибудь просветить меня простым способом получить эту строку в Ruby?

ответ

0

Попробуйте заменить:

shotdata = page.body.match(/var currentShotData = new String\(\"(.*)\"\)\; var playerDataHomeString/m)[1].strip 

с:

shotdata = page.body.match(/var currentShotData = new String\(\"(.*?)\"\)\; var playerDataHomeString/m)[1].strip 

изменяя (.*) с (.*?) вызовет lazy evaluation (согласование минимального числа символов) строки, которая является поведение вы хотите.

+0

Это не сработало. Может быть, есть разрыв строки между «)»; и "var playerDataHomeString"? – user3000487

+0

@ user3000487 можете ли вы разместить пример допустимого значения 'page.body'? – alfasin

+0

Допустимое значение? Не совсем уверен, что это значит. Когда я помещаю только файл page.body, а не весь этот материал, он печатает весь исходный код страницы. Мне просто нужно иметь возможность искать строку, являющуюся исходным кодом, и извлекать этот набор чисел. Редактировать: Извините, теперь он работает. Проблема заключалась в разрыве линии, но благодаря вашей ленивой оценке мне даже не нужно ничего, кроме «)». Спасибо. – user3000487

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