저는 멀티 스레드 Java 웹 크롤러를 작성하고 있습니다. 웹에서 이해할 수있는 것부터 사용자가 웹 페이지를로드하면 브라우저가 첫 번째 문서 (예 : index.html)를 요청하고 HTML을 받으면 다른 리소스 (이미지, CSS, JS)를 찾습니다.) 그 자원을 동시에 요청하십시오.얼마나 많은 Java HttpURLConnections를 동시에 열 수 있어야합니까?
내 크롤러가 원본 문서 만 요청하고 있습니다. 웬일인지, 나는 5 초마다 2 ~ 5 페이지 이상을 긁어 모을 수 없다. 내가 만들고있는 모든 HttpURLConnection에 대해 새로운 스레드를 돌리고있다. 나는 적어도 초당 20-40 페이지 긁어 모을 수 있어야하는 것 같습니다. 내가 100 개의 스레드를 돌리려고하면 나는 미친 듯이 I/O 예외를 얻는다. 무슨 일이야?
많은 서버가 동일한 IP로 액세스하는 데 한계가 있음을 고려하십시오. 크롤러는 적어도 요청 사이에 0.5 초 또는 1 초 정도 기다리는 것이 일반적입니다. 또한 archive.org의 크롤러 인 Heritrix를 확인하십시오. 오픈 소스이며 Java로 작성되었습니다. 아주 좋아. –