2015-01-28 4 views
4

나는 수십만 페이지를 크롤링하고 페이지의 내용을 색인/구문 분석하는 크롤러를 가지고 있으며, 내가 고민하고있는 한 가지는 페이지의 내용이 효율적으로 업데이트되었는지 확인하는 것입니다. 그것을 크롤링하고 페이지의 내용을 확인해야합니다.페이지 내용이 변경되었는지 확인하는 가장 좋은 방법은 무엇입니까?

분명히 전체 페이지를로드하고 모든 것을 다시 구문 분석하여 데이터베이스에 저장된 내용과 비교할 수 있습니다. 그러나 이는 매우 비효율적이며 컴퓨팅을 많이 사용하여 호스팅 비용이 높습니다.

해시를 비교할 생각입니다. 문제는 페이지가 단일 바이트 또는 문자를 변경하면 해시가 달라진다는 것입니다. 예를 들어, 페이지에 현재 날짜가 표시되면 해시가 다를 때마다 콘텐츠가 업데이트되었음을 ​​알려줍니다.

그럼 ... 어떻게할까요? HTML의 kb 크기를 보시겠습니까? 문자열 길이를보고 길이가 5 % 이상 변경되었는지, 내용이 "변경"되었는지 확인 하시겠습니까? 또는 문자열/내용의 작은 부분 만 변경된 경우 해시가 동일하게 유지되는 일종의 해싱 알고리즘이 있습니까?

+0

는'선택적 ETag'은'마지막 modified' 헤더 (또는) 그래서, 그냥를 사용하는 경우 근근이 살아가고있는 사이트에 대한 신뢰성을 – roippi

+0

을 ... 그리고'HEAD' http 요청을 사용하십시오. 일반 'GET'이 아닙니다. –

+0

많은 종류의 도메인과 사이트를 크롤링하고 있으며 새로운 도메인까지 확장하고 있습니다. 따라서 모든 도메인에서 신뢰할 수있는 방법은 –

답변

2

서버의 응답에서 "last-mofidied"헤더에 포함 된 값을 사용해 볼 수 있습니다. 이것을 멋진 객체로 파싱하면 간단한 날짜 비교가 가능해 재사용해야하는지 확인할 수 있습니다. ? 예를 들어 (파이썬에서 화려한 requests 라이브러리 사용 :.

import requests 
r = requests.get('http://en.wikipedia.org/wiki/Monty_Python') 
site_last_modified_date = r.headers["Last-Modified"] 

# from here, just parse the date and compare it with the last recorded date 
+1

모든 서버가이 날짜를 올바르게 반환하지는 않습니다. 신뢰할 수있는 솔루션이 아닌 것 같습니다. – stepozer

+0

답변 해 주셔서 감사합니다. 이전에 언급 한 바와 같이 여러 서버와 도메인을 크롤링하므로 어디에서나보다 안정적인 솔루션을 찾고 싶습니다. –

관련 문제