회사에서 웹에서 처리해야 하는 반복적인 작업을 최소화 시키기 위해
파이썬으로 크롤링하여 처리해봤다. 짱짱 편함
웹 요청, 응답 분석하고 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 |
---|