728x90

다나와 사이트 로그인 후 로그인된 상태에서만 가져올 수 있는 정보를 보여주는 예제이다.

먼저, 로그인을 위해 알아야 할 사항이다.

크롬브라우저에서 F12 를 눌러 Network 에서 2번 항목을 체크하자.

 

 

브라우저에서 접속한 것처럼 하려면 4번과 5번 정보가 매우 중요하다.

 

로그인 URL 정보

 

이제 로그인이 잘 된 것인지 확인하는 과정이다.

로그인 후에만 볼 수 있는 주문/배송 내역 조회 내역을 가져오는 스크래핑 방법이다.

 

로그인 성공 후 세션정보를 가지고 이동할 폐이지를 "주문/배송 조회"로 스크래핑 범위 한정해서 해보자.

li 태그에서 마우스 우클릭을 하고 Copy Selector 을 선택하면 해당 정보를 반환한다.

#wrap_shop_danawa > div.my_wish_bg > div > div.wish_content_wrap > div.my_info.no_sub_info > div > ul > li:nth-child(1)

를 반환하는데 여기에서 div.my_info.no_sub_info > div > ul > li 가 필요로 하는 것이라는 걸 알 수 있다.

 

 

로그인 성공 여부를 간단하게 확인하는 방법은 로그인 후 ID 정보가 있는지 확인하는 것이 가장 쉬운 방법이다.

 

 

파이썬 소스 코드 작성

화면에서도 결과를 출력하여 확인하고, 파일로도 저장해서 결과를 확인해 본다.

# BeautifulSoup은 HTML 과 XML 파일로부터 데이터를 수집하는 라이브러리
# pip install bs4
# pip install requests
# pip install fake-useragent
 
from bs4 import BeautifulSoup 
import requests as req
from fake_useragent import UserAgent
import csv
 
# 로그인 정보(개발자 도구)
login_info = {
    'redirectUrl''http://www.danawa.com/member/myPage.php',
    'loginMemberType''general',
    'id''jsk001005',
    'isSaveId''true',
    'password'''
 
# 헤더 정보
headers = { 
    'User-agent': UserAgent().chrome,
    'Referer' : 'https://auth.danawa.com/login?url=http%3A%2F%2Fwww.danawa.com%2Fmember%2FmyPage.php' 
}
 
# 로그인 URL
baseUrl = 'https://auth.danawa.com/login'
 
with req.session() as s:
    # Request(로그인 시도)
    res = s.post(baseUrl, login_info, headers=headers)
 
    # 로그인 시도 실패시 예외
    if res.status_code != 200:
        raise Exception("Login failed.")
    
    # 본문 수신 데이터 확인
    # print(res.content.decode('UTF-8'))
 
    # 로그인 성공 후 세션 정보를 가지고 페이지 이동
    res = s.get('https://buyer.danawa.com/order/Order/orderList', headers=headers)
 
    # 페이지 이동 후 수신 데이터 확인
    # print(res.text)
 
    # bs4 초기화
    soup = BeautifulSoup(res.text,"html.parser")
 
    # 로그인 성공 여부 체크
    check_name = soup.find('p', class_='user')
    # print(check_name)
 
    # 선택자 사용
    info_list = soup.select('div.my_info.no_sub_info > div > ul > li')
    # print(info_list) # 확인
 
    # 제목
    print()
    print('-' * 50)
 
    myshoppingList = []
    for v in info_list:
        # 속성 메소드 확인
        # print(dir(v))
 
        # 필요한 텍스트 추출
        proc, val = v.find('span').string.strip(), v.find('strong').string.strip()
        print('{} : {}'.format(proc,val))
 
        # 파일 저장 목적 변수에 저장
        temp = []
        temp.append(v.find('span').string.strip())
        temp.append(v.find('strong').string.strip())
        myshoppingList.append(temp)
 
    print('-' * 50)
 
    with open('myshoppingList.csv',"w", encoding="utf-8", newline=""as f:
        writer = csv.writer(f)
        writer.writerows(myshoppingList)
        print('CSV File created!')
    f.close
 
 

 

테스트에 사용한 파이썬 소스 코드

crawling_15.py
0.00MB

블로그 이미지

Link2Me

,