본문 바로가기
Programming/Crawling

파이썬 urllib.request VS requests 차이점?

by 하하호호 2021. 12. 18.
반응형

 

파이썬으로 웹사이트를 크롤링 할 때 가장 많이

사용되는 함수가 urllib.requestrequests다.

분명히 두 개함수가 차이가 있고, 필요한 상황에

맞춰 사용할 줄 알아야 할 것이다.

 

먼저 크롤링을 하기 위해 필수 모듈들을 호출

한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
# common module
import requests
import urllib.request
 
# BeautifulSoup
from bs4 import BeautifulSoup as bs
 
# Selenium
from selenium import webdriver
from scrapy.selector import Selector
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
cs

 

1. requests

먼저 requests는 데이터를 전송할 때 딕셔너리 형태로 보낸다. 

만약 존재하지 않는 페이지를 요청해도, 500, 404등의 HTTP

에러를 반환하지 않는다.

 

requests는 전송할 함수를 명확하게 명시한다. 서버를 개발하는

개발자라면 더 이해하기 쉽게 설계되어있다.

 

1
response = requests.get(url, params=params)
cs
1
2
= requests.get(BASE_URL + uri+'?hintKeywords={}&showDetail=1'.format(input("검색어를 입력하세요 : ").replace(' ','').strip()),
                 headers=get_header(method, uri, API_KEY, SECRET_KEY, CUSTOMER_ID))
cs

 

2. urllib.request

데이터를 전송할 때 인코딩을 해서 바이너리 형태로 전송한다.

데이터의 상태에 따라서 get과 post 함수를 구분해서 전송한다.

 

1
2
3
4
5
6
url = "www.example.com"
request = urllib.request.Request(url)
request.add_header("Id",client_id)
request.add_header("Secret",client_secret)
response = urllib.request.urlopen(request)
rescode = response.getcode()
cs

 

 

 

3. 결론

서버에 요청할 때 requests.get() / requsts.post()로 보내거나,

urllib.request.urlopen()으로 보내는 것은 기능상 차이는 없지만,

에러를 발생하거나, GET/POST를 명확히 구분해서 요청해야

하는 경우 사용방법이 나뉘게 된다.

 

또한 규모가 큰 대기업에서 제공하는 API의 경우 대부분

호출 방식이 requests를 사용한다. 이유는 요청방식이 

명시되어 있고, 요청하는 데이터도 정리되어 있기 때문

아닐까 추측한다.

 

반응형

댓글