[기본 사용 방식]


1
2
3
4
5
6
7
8
9
import requests
 
requests.get(...)            #get요청 (주로 html조회요청)
requests.post(...)           #post요청 (주로 추가/수정/삭제요청)
# get과 post의 차이 : 
# get은 데이터를 가져오는데 사용되고, 
# post는 서버의 데이터를 수정하는데 사용된다. 
requests.put(...)            #put요청
requests.delete(...)         #delete요청
cs


1
2
3
4
5
6
7
8
9
10
11
12
import requests
 
= requests.get(url 주소) #url주소에 데이터 요청
 
r.content                 # 응답 데이터(binary형식 내용,이미지파일 등) 
r.text                    # 응답 데이터(텍스트형식 내용, 텍스트 파일에 씀)
r.json                    # 응답 데이터 JSON형태
r.url                     # 해당 url 반환
r.status_code             # 응답 상태코드 (200 이면 성공)
r.headers                 # 응답 헤더의 {K:V} 형식의 딕셔너리 자료반환
r.encoding = 'utf-8'      # 응답 객체에 인코딩 지정
 
cs

[응답 상태코드 구분]

1xx : Informational (단순 정보 제공)

2xx : Successful (성공)

3xx : Redirect (추가 정보 필요)

4xx : Client error

5xx : Server error

특히, response 403 에러가 나는 경우 브라우저가 아닌 것(Python)에 대한 접속 차단으로 인한 것이다. 요청할 때, header에 User-Agent또는 Referer를 지정하고 접근하면 해결 가능하다.

[사용 예시]

ex.1) 요청시 headers에 User-Agent 정보를 크롬으로 지정하여 요청


1
2
3
4
5
6
7
8
9
10
11
12
13
import requests
 
# 요청시 헤더정보를 크롬으로 지정
request_headers = { 
'User-Agent' : ('Mozilla/5.0 (Windows NT 10.0;Win64; x64)\
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98\
Safari/537.36'), } 
 
url = "https://search.naver.com/search.naver"
response = requests.get(url,headers = request_headers)
 
print(response) 
#해당 url 요청할 때 headers를 임의로 설정하여 요청한 케이스
cs

ex.2) 요청시 headers에 Referer 정보를 바꾸어 웹에서 접속한 것으로 요청.

수요웹툰 페이지에서 접속한 것으로 요청하여, 웹툰 이미지 파일 가져오기


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import  os
import  requests
 
image_url = 'https://image-comic.pstatic.net/webtoon/626907/237\
/20190115192015_d9f2b6e9d878a372dfa6f07ebfc5f14a_IMAG01_1.jpg'
 
# Referer을 지정하여 수요웹툰 복학왕 페이지를 통해서 요청
headers = {'Referer''https://comic.naver.com/webtoon/list.nhn?\
titleId=626907&weekday=wed'}
 
response = requests.get(image_url, headers = headers)
print(response) # 접속 확인 (200 = 성공)
image_data = response.content           # binary형식
imgfile = os.path.basename(image_url)   # url을 이름으로 하는 비어있는 데이터생성
 
#파일에 이미지 데이터를 넣기
with open(imgfile, 'wb') as f:
    f.write(image_data)
cs



ex.3) 요청시 params지정을 활용한 뉴스기사 웹 크롤링

원하는 뉴스 기사를 들어가서 <F12>를 눌러 개발자 도구에 들어간 뒤, 다음과 같이 해당 페이지에 접속하기 위한 Parameters를 쉽게 추출할 수 있다.



이 Parameters는 다음과 같이 크롤링을 하고자 하는 url에서 "?"에 적혀있는 것 들이다.

https://news.naver.com/main/read.nhn?mode=LS2D&mid=shm&sid1=101&sid2=259&oid=009&aid=0004299807


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import requests
# 데이터를 요청하고자 하는 url = https://news.naver.com/main/read.nhn?\
# mode=LS2D&mid=shm&sid1=101&sid2=259&oid=009&aid=0004299807
# params를 지정하여 요청하는 것은 url뒤에 자동으로 ?와 &연산자로 묶어주는역할
 
url = "https://news.naver.com/main/read.nhn"
 
get_params = {
'mode''LS2D',
'mid''shm',
'sid1''101',
'sid2''259',
'oid''029',
'aid''0002506893'
}
 
= requests.get(url,params=get_params)
print(r.text) 
#해당 뉴스기사 데이터 가져오는 것 확인
cs




+ Recent posts