루비 문법으로 js의 ready()나 $(window).load() 의 기능을 하는 함수
조회수 1815회
네이버 api에서는 제공하지 않는 정보를 가져오기 위해서 네이버 지도 사이트에서 직접 크로울링을 하는 중에 있습니다.
근데 하다보니 네이버 지도가 2중으로 로딩?이
되는 것 같더라구요
처음에 기본 틀만 로딩을 하고 그 다음에 검색어로 내용을 체워넣는 그런 식 인거 같습니다.
그래서 문서의 로딩이 전부 다 끝났을 시점에 크로울링을 해야 할 것 같은데
ruby에서 그런 로딩이 전부 끝난 시점을 알 수 있는 함수가 있는지 알고싶습니다.
또는 위의 문제를 해결하기위해 다른 방법이 있는지 알고 싶습니다.
1 답변
-
브라우저에서 페이지가 로딩한 다음에 클라이언트에서 스크립트가 동작한 결과를 받아야 원하시는 결과를 얻을 수 있겠네요. 그러려면 실제 브라우저를 실행해서 결과를 가져오는 selenium같은 도구를 사용하셔야 합니다.
아래 코드를 참고하시면 브라우저를 실행해서 map.naver.com을 읽어온 다음에 그 결과를 doc에 저장해 줍니다. 이제 Nokogiri의 기능을 이용해서 원하는 값을 읽어오시면 됩니다.
require 'selenium-webdriver' require 'nokogiri' driver = Selenium::WebDriver.for :safari driver.get "http://map.naver.com" doc = Nokogiri::HTML(driver.page_source)
저는 Safari브라우저를 이용했는데요.
Selenium::WebDriver.for :firefox
라고 하면 firefox를 실행해서 결과를 읽어옵니다.
댓글 입력