회사에서 웹에서 처리해야 하는 반복적인 작업을 최소화 시키기 위해 

 

파이썬으로 크롤링하여 처리해봤다. 짱짱 편함

 

웹 요청, 응답 분석하고 json split 찾기 귀찮아서 그렇지...

 

WEB 데이터에 필요한 함수를 정리해보자

 

import requests #웹 요청시 

from bs4 import BeautifulSoup as bs #크롤링 

import time #딜레이
import os #system 함수 사용

 

 

#beautifulsoup을 이용해서 response값중에 원하는 데이터를 추출하는 방법.

#response값에서 A라는 이름을 가진 변수의 데이터를 가져옴

A = soup.find("input", attrs={"name":"A"})["value"]

 

#url request post 전송시 body값에 해당하는 값을 선언하는 방법.

#id=abcde&password=12345 이면 아래와 같이 작성
req_data={
    'id': abcde, 
    'password': 12345, 
}

#변수값 길이 확인
user= len(user_id)

 

#요청할 url 선언
EX) url='https://abc.com/login.do'

 

#header값 선언

#referer 체크하는 서비스도 많다.

#host는 없으면 거의 통신 에러남

#세션,쿠키값 검증하는 부분에는 cookie 같이 넣어줌

header={
    'Referer':'https://abc.com', 
    'Host': 'dotlike.dot
    'Cookie': cookie : ~~~, JSESSIONID:~~~~
}

 

#계정 로그인


cookie_res=''
while(1): 
 id=input('id : '); 
 pw=input('pw : '); 
 LOGIN_URL = ''
 LOGIN_DATA = {'id': id, 'pw': pw} 
 LOGIN_HEADER = {'Cookie':cookie } 

 res = s.post(LOGIN_URL, data=LOGIN_DATA, headers=LOGIN_HEADER, verify=False, allow_redirects=False) 

*해당 요청이 리다이렉트가 걸려있을때 "allow_redirects=False" 옵션을 주면 리다이렉트 되지 않은 응답을 얻을수있다.

 

#while, if문 이용하여 로그인 실패시 재 로그인 하도록 반복하게 가능

#while문은 당연히 id,pw 입력값 받는부분 부터 진행

if (res.text=="success"):

  break;

 else:

  continue;

 

#커맨드창 지우기

os.system('cls')

 

#json 형식으로 받은 응답값을 받았을때 원하는 데이터를 온전하게 분리

#EX) {"total":"2", "Page":[{"Capacity":null, "en":"13", "FG":"N"}]} 일때

result_=res.text.split(',')[0].split(':')[1].replace("\"","").replace(" ","")

 

#1. ","로 데이터 분리 후 [0]번째 선택 > [{"total":"2"]

#2. ":"로 데이터 분리 후 [1]번째 선택 > [ "2"]

#3. "(더블쿼터)를 replace로 제거 >[ 2]

#4. " "(스페이스)를 replace로 제거 > [2]

#(△ 위의 [ ]는 예시의 공백을 구분하기 위해 표시한 값으로 실제로 데이터 분리, 치환할때 없는 값.)

 

#어느정도 텀을 주기 위해 sleep을 이용해서 잠깐 멈춤

time.sleep(1)


#세션유지가 필요한 경우 해당 문구 사용하면 with안에서는 유지됨
with requests.Session() as s:

 

 

 

음 이정도면 간단한 웹 동작은 커버 가능했던거같네요.

 

'프로그램 개발' 카테고리의 다른 글

[python]scrapy를 이용한 웹툰 다운로드  (0) 2017.02.08

+ Recent posts