본문 바로가기
Development/Python

Python 웹 스크래핑 하기

by 폴피드 2024. 8. 20.
728x90
반응형

2~3주에 한번씩 책을 20권 이상 빌리다 보니 이미 빌린 책인지 아닌지 확인해야 할 일들이 생겼다. 일반 도서는 상관이 없었는데 잡지 같은 경우 구분하기가 상당히 불편했다. 이유는 대여 목록해 잡지의 정보가 제목만 나왔기 때문이다. 이 잡지가 몇월호인지 확인 해보려면 대출 목록에 들어가서 상세 내용을 확인해봐야만 했다. 그게 귀찮아서 내가 빌린 책을 손쉽게 검색 해보자는 취지에서 웹 스크래핑을 해봤다.

아래 코드는 대출 목록페이지에 있는 화면에서 링크를 가져오는 코드이다. 

def get_file_list_from_site(data_url: str, cookies: dict):
    # 세션 객체 생성
    session = requests.Session()

    # 인증된 세션으로 데이터 요청
    response = session.get(data_url, verify=False, cookies=cookies)

    # 데이터 파싱
    soup = BeautifulSoup(response.text, 'html.parser')

    links = []
    td_elements = soup.find_all('td', class_='important mobile-text2')
    count = 0
    for td in td_elements:
        a_tag = td.find('a')  # <td> 요소 내의 <a> 태그 찾기
        if a_tag:
            url = a_tag.get('href')
            links.append(url)
            count = count + 1
            print(f"url = {url}")        

    print(f"total link = {count}")       

    return links

- data_url : 대출 목록 페이지 주소
- cookies : 인증을 위한 cookies 값.
- 대출 목록을 보기 위해서는 로그인이 필요하다. 로그인 처리를 위해서 cookies 에 다음과 같은 형태로 JSESSIONID 를 담아줬다. 

cookies = {'JSESSIONID': '......................'}

- JSESSIONID 는 웹사이트에 실제로 로그인 한 후에 크롬 개발자 도구에서 확인할 수 있다. 

- BeautifulSoup 의 htmlparser 를 이용해서 실제 페이지의 정보를 가져온다. 이렇게 하면 response 에 data_url 페이지의 정보들이 담기게 된다.

- 대출 목록에서 서명의 제목을 클릭하게 되면 책의 상세 페이지로 갈수 있기 때문에 나는 이 때 사용되는 a 태그를 추출을 했다. 실제 html tag 링크는 아래와 같이 담겨져 있다. 그렇기 때문에 class 중 "mobile-text2" 인것을 찾아서 a tag 만 추출을 했다.

따라서 위 메소드가 실행되면 대출 도서의 a href 에 있는 url 들을 전부 모을수 있다.
다음에는 추출한 url 을 기반으로 책으 정보를 추출해 볼 예정이다.

 

728x90
반응형