bae@Bae-GroooKorea bin % ./jmeter
./jmeter: line 128: [: : integer expression expected
./jmeter: line 199: /Library/Java/JavaVirtualMachines/jdk-1.11.0.10.jdk/Contents/Home/bin/java: No such file or directory
크롤링과 스크래핑은 비슷한 목적이지만 상황에 따라 다르게 사용합니다. 그 목적은 다른 웹페이지의 정보를 가져와 활용하기 위한 것인데, 크롤링은 크롤링 서버에서 대상 서버로 요청을 보내 html 형태로 결과물을 가져올 수 있으면 이를 분석해서 원하는 데이터로 변환할 수 있어 상대적으로 간단한데, 대상 서버가 크롤링 서버의 접근을 막아놓은 경우는 스크래핑 방식을 이용해야 합니다.
스크래핑은 크롤링이 안 되는 경우, 브라우져 인스턴스를 생성해서 일반 사용자가 브라우져를 통해 사이트에 접근한 것처럼 해당 웹페이지 정보를 읽어올 수 있습니다. 브라우져 인스턴스를 띄우는 것은 메모리를 많이 사용하기 때문에 크롤링보다 느리고 구현도 번거로워서 비용 차이가 발생합니다. 크롤링을 먼저 시도하고 데이터를 가져오는데 실패하면 스크래핑을 시도합니다.
파이썬으로 작업하다가 보니 Chrome 인스턴스를 이용해서 하는 경우도 있더라구요. 예전에는 IE 인스턴스였는데 말입니다.
추가적으로 멀티 서버 크롤링은 대상 페이지에서 요청이 많은 IP 접속을 막는 경우 AWS 등의 클라우드 서버에서 인스턴스를 재시작하며 IP를 변경해가면서 접속을 시도할 때 사용합니다. 클라우드 운영 및 크롤링 환경 구축을 위해 많은 시간을 투입해야 하므로 비용이 많이 듭니다. 크롤링과 스크래핑은 대상 서비스에 크롤링 허락을 받은 상태 또는 일반적으로 허용되는 상태에만 구현이 가능합니다. 저작권 이슈 발생시 의뢰한 고객사의 책임이기도 하지만 저희 쪽에서도 법적인 이슈가 발생할 가능성이 있는 경우는 개발을 진행하지 않습니다.
컴퓨터 연산에서NaN(Not a Number, not a real number)은 연산 과정에서 잘못된 입력을 받았음을 나타내는 기호이다. ... 예를 들어서, 대부분의 부동소수점 장치는 음수에 대해서 제곱근을 구하려는 연산에 대해서 이것은 불가능(invalid)하다는 메시지와 함께NaN값을 반환한다.
예를 들면, 0으로 나눈 값
모든 개발언어에서 지원한다. C++, Delphi, Java, Python, C#, VisualBasic, Javascript 등등
// Example code : Assign NAN to a number and then test using IsNaN
var
float : Double;
begin
// Set the number to an invalid number
float := NaN; // Equivalent to 0.0/0.0
// Although an invalid number, we can still display it
ShowMessage('float = '+FloatToStr(float));
// And we can test to see if it is a valid number
if IsNaN(float)
then ShowMessage('float is not a number')
else ShowMessage('float = '+FloatToStr(float));
end;
출처: WikiPedia
참고로 추가로 많이 사용되는 키워드
Nil = Nothing; zero; pointer value to 0. A pointer value that is defined as undetermined
const Nil = Pointer(0);
Null = 정의 되지 않은 값. TheNullvariable has an undefined value.
var
Answer : Variant;
begin
Answer := Divide(4,2);
// Show the result of this division
if Answer = Null
then ShowMessage('4 / 2 = Invalid')
else ShowMessage('4 / 2 = '+IntToStr(Answer));
Answer := Divide(4,0);
// Show the result of this division
if Answer = Null
then ShowMessage('4 / 0 = Invalid')
else ShowMessage('4 / 0 = '+IntToStr(Answer));
end;
function TForm1.Divide(Dividend, Divisor: Integer) : Variant;
begin
// Try to divide the Dividend by the Divisor
try
Result := Dividend div Divisor;
except
Result := Null ; // Assign Null if the division threw an error
end;
end;
댓글을 달아 주세요