<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />나는 (합법적으로) 웹 사이트에서 스포츠 데이터를 가져 오려고 시도하고 있습니다 (예 : 런던의 2012 장애인 올림픽 결과). 공개 사이트는 IPC 데이터베이스에 쿼리를 제출하고 다음 테이블의 조합에 따라 수많은 테이블이있는 HTML로 페이지를 반환합니다. Competition (London Paralympics); 스포츠 (육상); 성별 (F); 이벤트 (100m); AWD 클래스 (F37); 대회 (히트 / 준결승 / 결승) 및 히트 번호의 각 단계별로 별도의 테이블이 포함되어 있습니다. 이벤트 당 약 20 개의 AWD 클래스가 있으며 일반적으로 이벤트의 인기도에 따라 페이지 당 20 개의 테이블이 있습니다. JMP에서 이것을 부분적으로 자동화하기 위해, 나는 약 360 (= 20x18) 개의 "Open"문 형식의 스크립트를 가지고있다 :
열다(
" http://www.paralympic.org/ipc_results/results.php?competition=2004PG&gender=m&sport=athletics&discipline=&event=100%20m&eclass=T11 ",
HTML 표 (3)
);
남자 100m F11 (블라인드) 그룹 (페이지의 세번째 테이블). 그런 다음 모든 이벤트에 대해이 작업을 반복하여 생성 된 테이블을 연결합니다. 내 문제는이 프로세스가 클래스 당 20 개의 테이블을 허용하는 스크립트 (위의 명령문 중 20 개를 연결)에서 작동하지만 괜찮습니다. 18 개의 이벤트 (360 = 20 x 18)를 모두 포함 시키려고하면 첫 번째 이벤트 (예 : 100m) 이후에 실행이 중단되지 않고 다음 이벤트 (200m)에 대한 출력이 생성되지 않습니다. 이 이벤트 / 클래스 조합에 12 개의 테이블 만 있기 때문에 (또는 그렇게 생각하지 않음) 또는 다른 문제가 있습니까? (저는 4 코어, WinXP를 돌리는 16Gb RAM의 64 비트 PC를 사용하고 있습니다).
웹상에서 "인터넷 열기"선택을 사용하는 경험이있는 사람이라면 누구든지 조언을 주시면 감사하겠습니다.
나는 왜 그것이 깨지는 지 모르지만 요청 수가 많을 때 네트워크 연결이 점점 느려지기 때문일 수 있습니다. 또는 요청이 다른 이유로 실패합니다.
모든 테이블을 한 번에 하나씩 연결하고 (그리고 소스 테이블을 닫는다)? 후자의 접근 방식은 컴퓨터에서 요구하는 것이 적습니다.
아래의 코드는 이벤트 목록이 예제의 두 이벤트를 훨씬 넘어서 확장 된 경우에도 작동합니다 (Mac 용 JMP 10을 사용하고 네트워크 연결이 매우 빠름). 페이지 당 20 개 미만의 테이블이있는 경우를 대비하여 Try ()를 사용하여 중지를 피했습니다.
dt = 새 테이블 ( "모든 결과" , 새 열 ( "소스 테이블" , 캐릭터 ) ) ;
event_list = { "100" , "400" } ; //이 예제에서 두 개의 이벤트 만
에 대한 ( 나는 = 1 , 나는 <= N 개 항목 ( event_list ) , 나는 ++,
시험 ( //이 이벤트에 대한 테이블이 더 이상없는 경우 루프를 이스케이프 처리합니다.
에 대한 ( j = 1 , j <= 20 , j ++,
// 시도 (Close (dt1, no save)); // 이전 서브 테이블을 닫습니다 (있는 경우).
dt1 = 열다 (
" http://www.paralympic.org/ipc_results/results.php?competition=2004PG&gender=m&sport=athletics&discipline=&event= "
|| event_list [ 나는 ] || "% 20m & eclass = T11" ,
HTML 표 ( j )
) ;
기다림 ( 0 ) ; // JMP에게 다운로드를 완료하고 네트워크가 느린 경우 인수를 늘릴 기회를줍니다.
dt1 << 세트 이름 ( event_list [ 나는 ] || "_표" || 숯 ( j ) ) ;
안부 = dt1 << 새 열 ( "소스 테이블" , 캐릭터 ) ;
각 행에 대해 ( dt1 : 안부 = ( dt1 << 이름을 얻다 ) ) ;
dt << 사슬 같이 잇다 ( dt1 , 첫 번째 표에 추가 ( 1 ) ) ;
닫기 ( dt1 , 저장 안 함 ) ; // 서브 테이블 닫기
)
)
) ;