2015-01-29 7 views
0

제 3 자 웹 사이트에서 데이터를 검색하는 Ruby 웹 크롤러를 작성했습니다. 나는 Nokogiri를 사용하여 특정 CSS div 및 특정 필드 (추출한 노드의 요소 및 요소에 액세스)를 기반으로 정보를 추출합니다.웹 크롤러 용 파서를 유지 관리하는 방법

때로는 제 3 자 웹 사이트의 구조가 변경되어 크롤러를 손상시킵니다 (element[1].children[2]element[2].children[0]으로 변경해야 할 수도 있음).

지금까지 구조체가 변경 될 때 구문 분석기를 신속하게 수정할 수있는 노드 구조를 인쇄하는 유틸리티가 있습니다. 또한 "일부"값을 추출 할 수있는 자동화 된 프로세스가 있습니다.

이 문제를 해결할 더 우아한 방법이 있는지 알고 싶습니다. 유지 관리가 쉬운 크롤러는 어떻게 작성합니까?

+0

산업용 스케일로 만들고 싶다면 브라우저 플러그인을 작성하고 아웃소싱 된 작업자가 스크래핑하려는 필드를 클릭하십시오. 그런 다음 해당 필드에 대한 XPATH를 찾아 값을 추출합니다. 형식이 변경되면 작업자 (MTurk?)를 추가하여 페이지를로드하고 추출 할 필드를 다시 클릭하십시오. – Chloe

+2

주어진 답변은 훌륭한 조언입니다. 그러나 구문 분석하려는 HTML 샘플이 없으면 일반적인/일반적인 조언을 제공하는 것 이상으로 도움을 줄 수는 없습니다. –

답변

1

웹 페이지의 데이터와 메타 데이터를 사용하여 원하는 요소 인덱스 번호를 사용하는 대신 가능한 많이 관심있는 요소를 찾으십시오.

"class"및 "id"속성은이를 수행하는 좋은 방법입니다. Nokogiri에는 XPath 기능이있어 요소를 기반으로 요소를 쉽게 선택할 수 있습니다. 그럴 수 없다면 요소 주위의 페이지 콘텐츠를 살펴볼 수 있습니다 (예 : 가중치를 찾고 테이블에있는 것을 알고 있다면 "kg"으로 끝나는 문자열을 검색 할 수 있습니다. 파싱중인 문서를 보지 않고도 수퍼 특정 팁을주는 것은 어렵습니다.

크롤러는 데이터가 잘못 표시되는 경우 데이터를 검색하고 예외를 발생 시키거나 경고를 표시하도록 설정하는 것이 좋습니다.

1

CSS를 사용하십시오. 예를 들어 제품의 가격은 거의 항상있을 것입니다 :

page.at('#price, .price').text 

이 사이트는 레이아웃 (테마)를 변경할 수 있으며, 이것은 여전히 ​​작동합니다.

관련 문제