2016-05-31 2 views
2

Nokogiri로 http://www.pro-medic.ru/index.php?ht=246&perpage=all을 구문 분석하려고하는데 불행히도 페이지에서 모든 항목을 가져올 수 없습니다.Nokogiri로 큰 HTML 파일 구문 분석

require 'open-uri' 
require 'nokogiri' 

html = Nokogiri::HTML open('http://www.pro-medic.ru/index.php?ht=246&perpage=all') 
p html.css('ul.products-grid-compact li .goods_container').count 

그것은 단지 83 항목을 반환하지만 실제 개수가 약 186

나는 문제가 open 될 수 있다고 생각이지만, 그 함수가 읽는 것 같다

내 간단한 테스트 코드는 HTML 페이지가 올바르게 표시됩니다.

누구나 같은 문제에 직면 했습니까?

답변

3

파일이 Nokogiri의 파서 한계를 초과하는 것으로 보입니다. 당신은 HUGE 플래그를 추가하여 한계 휴식을 취할 수 있습니다 : 논리 연산자 Parse Options에 따르면 ||=

과 혼동하지 마십시오 |=은 비트 OR 대입 연산자가

require 'open-uri' 
require 'nokogiri' 

url = 'http://www.pro-medic.ru/index.php?ht=246&perpage=all' 
html = Nokogiri::HTML(open(url)) do |config| 
    config.options |= Nokogiri::XML::ParseOptions::HUGE 
end 
html.css('ul.products-grid-compact li .goods_container').count 
#=> 186 

하는 것으로를, 당신은 또한 설정할 수 있습니다 이 깃발을 통해 config.huge

+0

스테판 감사합니다. 페이지 크기에 대한 제한이 있어야한다고 생각합니다. 그러나'html.css ('ul.products-grid-compact li .goods_container'). 카운트는 이제 계산하는 데 너무 많은 시간이 걸립니다. 속도를 높이는 방법이 있습니까? 아니면 큰 페이지 크기 때문일뿐입니다. – Aleksey

+0

빠른 점검을 통해 마크 업이 손상되었음을 확인할 수 있습니다. 571의 깊이를 갖는 노드 트리가 생기고 그런 나무는 횡단하는데 아주 오래 걸립니다. Nokogiri에 먹이주기 전에 페이지를 위생 처리해야합니다. Safari를 사용하여 고정 된 버전의 페이지를 저장했으며 구성 변경없이 요소를 계산하는 데 단지 0.5 초가 걸렸습니다. – Stefan

+0

스테판은 마크 업을 어떻게 확인합니까? 코드에서 자동으로 수행 할 수있는 방법이 있습니까? – Aleksey