셔틀버스 예약 자동화 프로그램

chaean·2023년 4월 23일
0

크롤링

목록 보기
2/3

1. 로그인이 필요한 경우 requests 모듈의 session 함수를 이용해서 유지할 수 있다.

이외에도 쿠키값, 헤더값 등등 여러가지 값을 가져올 수 있음.

2. session.post(url, 값)을 넣을때 data / json의 차이

로그인후 Authorization을 가져오기

    response_json = response.json()
    print(response_json)
결과값 : {'result': 'OK', 'resultMsg': '', 'data': 'QedXyA83JFEG8nl8zeoM3mD693G7wbSFxu3lAgFeziWjPnRXcx+X5hECB2QZo3CB85wNBVHVcgOiU6W15FWH6g=='}

ㄴ 개발자도구 -> 미리보기 값과 동일
.json은 결과값? 데이터?를 가져오는 함수??

2023.04.19

이제까지
로그인 -> 노원 등교/하교 버스 리스트 가져오기가 안됐는데 request모듈의 get함수를 서버에 보낼때
authorization, cookie값을 포함해서 보냈더니 성공!!

로그인 해야 하는 페이지에서는
Authorization(있을수도?없을수도?) / cookie 값! + 세션유지

pyinstaller

  • 파이썬에서 내가 만든 코드를 실행파일(.exe)로 만드려면 여러가지 모듈이 있지만 pyinstaller라는 모듈을 사용해서 만들 수 있음
pyinstaller --onefile --hidden-import=requests main.py

--hidden-import는 포함 시켜야하는 외부라이브러리의 모듈명을 명시

  • selenium - 동적페이지에서 효율적이며 속도는 느린편
  • requests / bs4 - 정적페이지에서 효율적이고 동적페이지 크롤링에 어려움을 느낌 / requests는 http통신을 하기때문에 속도가 빠른편

2023_04_25

현재 시간을 비교해서 10시가 되면 코드를 실행시키도록 하려는 생각이였는데 1초마다 비교를 계속하는 것은
컴퓨터 자원을 많이 잡아먹을 것 같다는 생각을 했다. 그러던 와중
파이썬의 schedule, apscheduler이라는 라이브러리를 찾음!
이 라이브러리를 통해 특정 시간에 함수를 실행시킬 수 있을 것 같음
ㄴ 배치 프로그램의 개념?

2023_04_26

def checkAt22() :
    now = time.localtime()
    if now.tm_hour >= 15:
        run()
    else:
        # 22시 - 현재 시간을 하여 변수에 담고 sleep을 통해 기다린뒤 실행
        remainingSeconds = (15 - now.tm_hour) * 3600 - now.tm_min * 60 - now.tm_sec
        time.sleep(remainingSeconds)
        run()

배치 프로그램의 개념을 현재시간에서 22시까지 걸리는 시간을 time모듈의 sleep을 통해 기다리려고 시도해봄

  • 근데 시간이 되기전에 실행시켜 else문에 들어갔더니 프로그램이 응답없음 이라고 나옴
    • 검색해보니 별도의 스레드에서 실행시키는 것이 해결책
def excuteThread():
    thread = threading.Thread(target=checkAt22)
    thread.start()

스레드 생성하여 실행하는 코드인데 메인 스레드(프로그램)을 종료해도 프로그램이 제대로 안꺼지더라고?

  • 백그라운드에서 계속 돌고있기때문 만약 메인 스레드를 종료할때 같이 종료되기를 원한다면
thread.setDaemon(True)

코드를 추가해주면됨.

'
'
'
'

!!느낀점

예약 자동화 프로그램을 만들면서 가장 시간을 많이 잡아먹은 부분은
1. 인증부분(Authorization, cookie)
2. 파라미터로 json / data를 사용할 때의 차이점
3. 10시에 코드를 자동으로 실행시킬 때

  • 사실 코드는 정말 짧고 간단한 자동화 프로그램이지만 만들면서
    크롬 개발자도구를 통해 얻을 수 있는 많은 내용에 대해 공부할 수 있었고 배치 프로그램의 개념과 스레드의 개념에 대해 공부할 수 있었다
    직접 부딪혀가며 만들다보니 더 빠르게 학습할 수 있었던 것 같다.
    이후에는 크롤링을 활용한 웹페이지를 만들어보려고한다.
profile
컴퓨터공학 학부생

0개의 댓글