Node 및 Cheerio를 사용하여 웹 스크레이퍼를 구축 중이며 특정 웹 사이트의 경우 다음 오류가 발생합니다 (이 웹 사이트에서만 발생합니다.
매번 다른 위치에서 발생하므로 때로는 url x오류가 발생하고 다른 시간 url x은 괜찮으며 완전히 다른 URL입니다.
Error!: Error: socket hang up using [insert random URL, it's different every time]
Error: socket hang up
at createHangUpError (http.js:1445:15)
at Socket.socketOnEnd [as onend] (http.js:1541:23)
at Socket.g (events.js:175:14)
at Socket.EventEmitter.emit (events.js:117:20)
at _stream_readable.js:910:16
at process._tickCallback (node.js:415:13)
이것은 디버깅하기가 매우 까다 롭습니다. 처음부터 시작 해야할지 모르겠습니다. 시작하려면, 무엇 인가 소켓 오류를 끊지? 404 오류입니까 아니면 비슷한가요? 아니면 서버가 연결을 거부했음을 의미합니까?
나는 이것에 대한 설명을 찾을 수 없다!
편집 : 다음은 (때로는) 오류를 반환하는 코드 샘플입니다.
function scrapeNexts(url, oncomplete) {
request(url, function(err, resp, body) {
if (err) {
console.log("Uh-oh, ScrapeNexts Error!: " + err + " using " + url);
errors.nexts.push(url);
}
$ = cheerio.load(body);
// do stuff with the '$' cheerio content here
});
}
연결을 닫으라는 직접 전화는 없지만, Node Request내가 말할 수있는 한 사용하고 http.get있으므로 이것이 필요하지 않습니다. 잘못되면 정정하십시오!
편집 2 : 여기에 오류를 일으키는 실제 사용중인 코드가 있습니다. prodURL다른 변수는 대부분 이전에 정의 된 jquery 선택기입니다. asyncNode 용 라이브러리를 사용합니다 .
function scrapeNexts(url, oncomplete) {
request(url, function (err, resp, body) {
if (err) {
console.log("Uh-oh, ScrapeNexts Error!: " + err + " using " + url);
errors.nexts.push(url);
}
async.series([
function (callback) {
$ = cheerio.load(body);
callback();
},
function (callback) {
$(prodURL).each(function () {
var theHref = $(this).attr('href');
urls.push(baseURL + theHref);
});
var next = $(next_select).first().attr('href');
oncomplete(next);
}
]);
});
}
request특정 http.request요청이 아닌 노드 서비스를 사용하고 있습니다 (노드를 처음 접 한다고 생각합니다). 이것은 하나입니다 : github.com/mikeal/request 이것은 자동으로 요청을 마치는 것처럼 보입니다. 편집 : 문서에 따르면 http method, defaults to GET문제가 아닙니다.
cheerio.load것은 비동기입니다. 따라서 $로 작업을 시작하기 전에 완료되지 않을 수 있습니다.
end시간 초과 기간 내에 연결 이벤트를 보내지 않음을 의미합니다 . 를 통해 cheerio 요청을받는 경우http.request(아님http.get).request.end()요청 전송을 마치 려면 전화 해야합니다.