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

 

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

 

웹 요청, 응답 분석하고 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

[예전에 프로그램 만들었던 것을 까먹지 않고 정리 하기위함 입니다.]


15년 12월쯤 파이썬에 대해 알게되고 프로그램 하나 만들어보자는 생각에


어떤 것을 만들면 재미있을까 싶었던 찰나에


유튜브에서 짧은 시간에 스크래피를 이용해 프로그램을 만드는것을 보고


'이거다!'라고 결심하게 되었다.





평소 웹툰을 많이 좋아하니 웹툰을 한번 저장 해보는건 어떨까. 라는 생각에 


여기저기 정보를 찾기 시작


당시 한글로 된 scrapy관련 문서가 많지 않아서 힘들었다는...





[사용하는 라이브러리(python 2.7 기준)]

python의 버전에 따라서 사용되는 라이브러리 버전이 다를수 있다.



import requests

from scrapy.selector import Selector

selector를 이용하여  html중 원하는 값을 가져올수 있다.


 import urllib2

from urllib2 import Request

주어진 url에서 데이터를 뽑아온다

import httplib

from urlparse import urljoin, urlunparse 

url끼리 합치고 조합한다.



마구잡이로 만들다보니 사용하지 않는것들이 있을수 있다. 



[알고리즘]


요일 입력(디폴트 현재요일) -> 웹툰 제목 입력 -> 선택한 웹툰 1페이지의 몇개의 화가 있는지 목록 확인 (신작 아니면 보통 10개 )-> 최신화부터 차례대로 다운로드 



[긁어오는 방법]

css selector를 이용한다 ex) 요일입력시 해당 요일의 웹툰 url 추출


[ links = sel.css('.img_list .thumb a::attr(href)').extract()#웹툰 url ] 




이런식으로 사용하여 마지막엔 웹툰 화의 갯수, 선택한 화의 이미지 갯수 등을 변수로 주고

for문으로 전체적인 이미지를 다운로드 할수 있다.



[이 프로그램은 이렇게도 사용 할 수 있다라는것을 보여주는것 일 뿐 불법적인 용도로 사용하시면 안됩니다. 법적책임은 본인에게!]

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

[python] WEB 데이터 사용하기  (0) 2020.01.17

+ Recent posts