나는 최근에 웹 페이지의 구문 분석을 많이 해 봤는데 내 처리는 일반적으로이 같은 같습니다나중에 파싱하기 위해 전체 웹 페이지를 저장하는 방법?
- 데이터베이스에 각
- 다운로드 전체 웹 페이지를
- 가져 오기 목록을 구문 분석하는 링크의 목록을 얻을 링크 및
- 는
- 단계 4,5 (무엇이든, 내용, METAS) 각 긁어 세션
- 긁어 관련 부분에 대한 색인을 추가 MySQL의에 저장 - 반복/린스 - I로 t는 diff를 다듬기를 원한다. 같은 페이지의 콘텐츠를 나중에 수정하거나 xpath를 수정하거나 해당 내용 또는 다른 내용을 삭제하십시오.
- 수출 스크 레이 핑의 실시간 데이터베이스에 대한 데이터베이스 및 웹 페이지 열을 제거하고 긁어 인덱스 지금
, 가장 쉬운 대답은 당신이 웹 페이지를 다운로드하는 동시에 긁어 않습니다 물론이지만, 나는이 생각하지 않습니다 이 과정을 조금 더 성장시킬 수 있기를 바라면서 모듈 식 디자인에 매우 적합합니다.
내가 계속해서 문제가되는 몇 가지 예를 들어 보겠습니다. 50k 페이지 (행)에 대해 나는 약 6g 데이터베이스를 가지고 있습니다. 기억하십시오. 우리는 전체 웹 페이지를 하나의 열에 저장하고 관련 데이터를 추출하여 다른 열에 저장합니다.
테이블에 인덱스를 던지면 6 기가의 램이있는 쿼드 코어에서 7-10 분이 걸릴 수 있습니다. 하나님은 당신이 무언가를 망칠 것을 금하고 mysqld가 70 % cpu와 당신의 숫양으로 뛰어 오르는 것을 지켜보십시오. 이것은 4 단계입니다. 모든 작업을 수행하기 전에 열에 인덱스를 던져야합니다. 메타를 잡고 싶다면 제목 열에 대해 인덱스를 던지고 각각을 업데이트하십시오. where title은 null이 아닙니다.
내가 한 행에 모든 행을 쓰지 않는다는 것을 밝혀야한다. 그것은 나에게 나쁜 영향을주는 경향이있다. 기억해야 할 것은 6gig를 메모리에로드하는 것이다. ;)
내가이 문제에 대한 해결책은 총 카운트를 잡아서 한 번에 100 개 정도의 오프셋을 반복하는 것입니다.
아직도 - 여기에도 일부 저장 문제가 있다고 생각합니다. 대신 파일 시스템에 원래 웹 페이지를 저장해야합니까? 문고 또는 소파와 같은 문서 지향 데이터베이스에 페이지를 저장하는 방법에 대해 생각해 보았습니다.
수정 여기 제시된 해결책은 한 사용자가 50k 페이지를 단지 하나의 배치라고 간주한다는 사실을 고려해야합니다. 나는 아직 여러 사용자를 보유하려고하지 않고 있지만 한 번에 두 개 이상의 배치를 저장할 수있는 기능을 원합니다.
- 우리의 경우 네가이 길을 갔다. 각 디렉토리에 X 페이지 수를 저장하려는 경우 당신의 유일한 색인에 의하여 전화 번호부 또는 어떤 권리? - 분명히했는지 확실하지 않지만 50k 페이지가 한 번에 하나 일뿐입니다 - 한 번에 수백 또는 수천 개를 저장하고 싶습니다. – eyberg
wget에 디렉토리 구조와 관련된 다양한 옵션이 있습니다. '-x, --force-directories는 디렉토리 생성을 강제합니다 .','-P, --directory-prefix = PREFIX'는'PREFIX/...'에 파일을 저장합니다. –