본문 바로가기
혼자 공부하는 것들/web crawling

파이썬으로 크롤링하기 (안심도서인원수 파악하기,selenium, webdriver ,chromdriver) +하면서 논리오류점 찾기

by applepick 2020. 9. 5.
반응형

도서관에서 잠깐 방학 동안 일하게 되었습니다.

코로나 때문에 비대면으로 책을 대출해주는 서비스를 하고 있는데, 인원수 제한이 없어 몇 명 신청했는지 항상 직접 세어보기 귀찮아서 만들게 되었습니다.

import requests
from bs4 import BeautifulSoup
from selenium import webdriver

def findpeople():
    driver = webdriver.Chrome('/Users/sungmin/chromedriver')
    driver.get('http://www.gdlibrary.or.kr/gilib/1000658/100049/bbsList.do')

    url = 'http://www.gdlibrary.or.kr/gilib/1000658/100049/bbsList.do'
    req = requests.get(url)
    html = req.text
    soup = BeautifulSoup(html, 'html.parser')

    nowday = "2020-09-05"
    rank= 0
    ##첫페이지
    for tag in soup.select('td'):
        if tag.text == nowday:
            rank=rank+1

     ##두번쨰페이지
    driver.find_element_by_xpath("""//*[@id="listForm"]/div[2]/p/span[2]/a""").click()
    for tag in soup.select('td'):
        if tag.text == nowday:
            rank=rank+1
            
    ##세번째페이지
    driver.find_element_by_xpath("""//*[@id="listForm"]/div[2]/p/span[6]/a""").click()
    for tag in soup.select('td'):
        if tag.text == nowday:
            rank=rank+1

    print("오늘의 안심도서대출은 "+str(rank-1) +"명 입니다.")


findpeople()


 

크롬 가상 드라이버에 안심 도서 신청란 url을 넣어줍니다. 그리고 리스트 값에서 다음 버튼이 있는데 driver에서 xpath값을 사용할 수 있도록 만들었습니다. 그래서 페이지 값에서 xpath 값으로 변환한 뒤 click() 메서드를 사용하면 직접 알아서 눌러주게 됩니다. 이렇게 페이지를 넘어가면서 td값에 오늘 날짜 값을 비교하면서 있으면 rank가 1씩 증가하게 만들었습니다. 이렇게 하면 

이런 식으로 결과 값을 가져오게 됩니다. 

 

+하면서 논리 오류점 찾기

이렇게 하면 대략 30명 정도 신청하면 알 수 있습니다. 하지만 30명이 넘어가면 못 찾겠죠? 그러면 for문을 통해 xpath의 변환되는 값들을 비교해가면서 안에 숫자를 바꿔주면서 반복문을 돌리면 모두 클릭하게 됩니다. 이렇게 만든 이유는 대부분 30명이 넘지 않아 간단하게 만들어봤습니다. 만약 다른 날짜들도 검색하고 싶다면 반복 제어문을 만들고 nowday값을 찾고 싶은 날짜를 입력한 뒤 찾으면 됩니다. 직접 공부한 것들로 도서관에서 일하면서 쓸 수 있다는 게 값진 경험이었습니다.

반응형

댓글