AtCoder Crawling

안상준·2025년 5월 2일

Virtualize Deobfuscator

목록 보기
7/14

AtCoder

컴파일 가능한 C 코드 데이터 생성을 위해 코딩테스트에서 사용한 코드를 이용하려고 한다.

AtCoder 사이트는 코딩테스트 대회를 진행하는 사이트로 대회에 제출한 코드들을 볼 수 있는 사이트다.

Crawling

로그인을 해야 코드를 볼 수 있기 때문에 사이트에 로그인 한 후 세션 쿠키를 이용하여 크롤링을 하였다.

Contests


먼저 대회 목록에서 개최한 대회 명을 가져온다.

Submissions

그다음 위에서 구한 대회명을 이용하여 대회에 코드를 제출한 사용자 명을 가져온다. 이때, 언어는 C, 상태는 AC(Accept) 코드 제출자 정보를 가져온다.

Code


실제로 코드를 가져오는 코드이다. 위에서 구한 사용자 명과 사용자 아이디를 이용하여 해당 사용자가 제출한 코드를 가져온다.

"https://atcoder.jp/contests/{contest_id}/submissions/{submission_id}"

다음과 같은 url로 GET요청을 하여 정보를 가져온다. 응답이 200이면 올바르게 가져온 것이며, 가져온 코드는 파일에 저장한다.
맨 아래 sleep이 있는데 이는 너무 많은 요청을 하면 트래픽 제한을 넘겨 서버에서 강제로 연결을 끊게 된다.

Main


마지막 Main문이다. 앞서 설명한 함수들을 호출하는 코드이며
전체적인 흐름은 대회 명을 가져오고 각 대회에 참여한 유저를 찾은다음 각 유저의 제출 코드를 가져오는 순서로 진행된다.
간혹 대회명을 가져올때, 403이 뜨는 경우가 있다. 해당 대회들은 모아서 따로 돌려주었다.

DataCounter


데이터를 크롤링하고 생성된 데이터 개수를 카운트 하는 코드이다.
현재까지 약 97,000개 생성하였다.

Classify

가져온 데이터를 switch유무에 따라 분류하는 코드를 작성해 주었다.

데이터가 있는 위치, switch, non-switch를 저장할 경로를 작성해 주고 디렉토리를 생성해 주었다.
데이터가 있는 디렉토리에서 .c파일들을 가져와 "switch"가 포함돼 있는지 확인후 저장해 준다.

Results

  • 데이터는 현재까지 약 97,000개 생성
  • switch : 약 600개
  • 코드는 컴파일 가능함
  • 코드의 길이는 적당

트래픽 제한을 피하기 위해 딜레이를 넣어 데이터를 가져오는데 매우 오래걸린다.
switch를 사용하는 코드가 많이 없어 최대한 많은 코드를 가져와야 할 것 같다.

0개의 댓글