2

나는이 디자인 질문을 명중 할 때 나는 PHP에있는 긁는 도구 그리고 거미를 건축하고있다. 나는 크롤링과 긁기 작업 (대부분의 전문 시스템이하는 것처럼)을 분리하는 시스템과 거미가 기어 다니는 것처럼 긁는 시스템을 만드는 것 사이의 장단점에 대해 궁금해하고있었습니다. 내가 생각할 수있는 유일한 점은 큐를 분할하여 큐를 사용하면 다음 페이지가 긁힐지를 대기열에 요청해야하는 여러 개의 스크래퍼가 있으면 작업을 더 잘 병렬화 할 수 있다는 것입니다. 다른 트레이드 오프에 대해 생각해 본 사람이이 두 프로그램으로 구분되는 주된 이유를 설명 할 수 있습니까?거미와 긁는 도구 건축술

참고 : 크롤링 순서는 두 경우 모두 동일하지만 페이지가 당겨지는 유일한 차이점이 있습니다.

+0

"이들이 일반적으로 두 개의 프로그램으로 분리되는 주요 이유"- 다른 작업이기 때문에? – zerkms

+0

당신은 거미가 쉽게 페이지의 링크로 이동하기 전에 페이지를 당기고 처리 할 수 ​​있습니다. 그러나 대부분의 스파이더는 링크를 다른 프로그램 (스크레이퍼)의 큐에 넣기 만하면 나중에 가져올 수 있습니다. 어떤 것이 든 더 복잡하고 더 많은 페이지 요청을 포함하지만 이것은 대부분의 시스템이 작동하는 방식입니다. 왜? – hackartist

답변

2

크롤러가 페이지를 검색하고 스파이더가 페이지를 검색합니다. 이러한 작업을 별도로 유지하면 다른 작업을 변경하지 않고 한 작업의 구현을 변경할 수 있습니다. 이것이 분리 된 이유입니다. 단순히 좋은 소프트웨어 설계입니다.

예제는 단일 클래스/모듈/프로그램/함수/무엇이든지간에 검색과 검색을 결합하는 경우 페이지 검색 방법의 변경 (예 : 병렬 검색, 프록시 검색, 등) 전체 프로그램을 다시 작성해야합니다.

다른 종류의 데이터 (예 : html 페이지 대신 rss 피드)를 처리하려는 경우 스크래퍼 전체를 처음부터 작성해야하며 페이지 검색시 수행 한 작업을 다시 사용할 수 없습니다.

+0

해답을 가져 주셔서 감사합니다. 나는 파싱 로직을 재 작성할 필요없이 여러 페이지 포맷에서 스크레이퍼를 사용할 수있는 방법에 대해 생각해 보지 못했습니다. 나는 원래이 분리 방식으로 스 크레이퍼를 작성했지만 크롤러가 파서가 따라 잡을 수있는 속도보다 훨씬 빠르게 움직일 때 문제가 발생하여 대기열을 백업 할 수 있으므로 친구가 간단히 크롤링하고 끌어 당길 것을 제안했다. 복잡성을 줄이십시오. 나는 개념적으로 개발을 위해 그것들을 분리시키는 것이 합리적이라는 것을 알고 있었지만 성능상의 이유도 찾고있었습니다. 감사. – hackartist

관련 문제