저는 소비재를 거래하는 온라인 상점을 운영하고 있습니다. 온라인 상점은 소비자 수요에 따라 시장 가격이 항상 유동적입니다.많은 수의 URL을 긁어내는보다 효과적인 방법이 있습니까 (> 30k)?
나는 최근에 ~ 30k 개의 URL 목록을 통해 작동하는 루비 스크립트 (rake task)를 매일 실행하여 경쟁자의 가격을 기록하기 시작했으며 관련 자료 몇 개를 채웠다. 탄성 검색 지수. 모든 사이트가 자바 스크립트를 실행하지 않고 필요한 데이터를 올바르게 렌더링하지는 않기 때문에 Nokogiri와 PhantomJS를 사용합니다.
내 프로그램은 현재 실행 중에 ~ 4GB의 메모리를 소비하며, PhantomJS는이 소비의 대부분을 차지합니다 (~ 2.5GB). 스크립트도 실행하는 데 많은 시간이 걸립니다. 정확히 얼마나 길지는 모르겠지만 10 시간 이상이라고 생각합니다.
저는 메모리 소비를 줄이고 스크래핑 속도를 향상시키는 방법에 대한 제안을 매우 열어두고 있습니다. 제 경쟁자가 저에게 멋진 JSON API를 제공하기를 바랍니다.하지만 유감스럽게도 그런 종류의 관계는 없습니다.
* JavaScript없이 스크랩 할 수있는 사이트의 경우 대체 경로를 구현하십시오. 동시성 증가 - 실제 CPU 부하를 기반으로 한 스로틀. (또한 다른 1.5GB는 어디로 가고 있습니까? : - /) – user2864740
인터넷 검색을 통해 찾을 수있는 일반적인 모범 사례를 토대로 의견을 제시해주십시오. 특정 정보가 필요하면 시스템 및 코드에 대한 세부 정보를 제공해야합니다. "[ask]"및 "[mcve]"를 참조하십시오. –
매일 스 크립트를 실행하지 말고, 스로틀 링을 보조 코드에서 계속 실행하십시오. 페이지가 마지막으로 확인 된 시간을 추적하고 n 시간 이내에 다시하지 마십시오. 좋은 시민이된다는 것은 다른 사람의 호스트 나 대역폭을 꺾지 않는다는 것을 명심하십시오. 마지막으로 본 이후 페이지가 변경되었는지 확인하려면 HTTP HEAD 요청을 사용하십시오. –