본문 바로가기

문돌이 존버/코딩연습

파이썬 크롤링 requests vs urllib.request 차이는?

반응형

오늘은 파이썬 크롤링을 하면서 궁금해하셨을 request와 urllib.request의 차이에 대해 말해보겠습니다. 일단 필요한 모듈을 불러옵니다.

import requests
import urllib.request
import re
from bs4 import BeautifulSoup as bs

1. requests

데이터를 보낼 때 딕셔너리 형태로 보낸다
없는 페이지를 요청해도 에러를 띄우지 않는다
url = 'https://newsstand.naver.com/?list=&pcode=011'
req = requests.get(url)
print('url을 get으로 받아온 형태는: ', req)
print('#' * 20)
html = req.text
print('get으로 받아온 후의 문자열만 추출한 것은: ', html)
print('#' * 20)

soup = bs(html, 'html.parser')
print('Beautifulsoup의 html parser을 이용해 나온 형태는: ', soup)

# 없는 페이지 요청시
url = 'https://newsstand.naver.com/?list=&pcode=011/123'
req = requests.get(url)
html = req.text
soup = bs(html, 'html.parser')
soup

2. urllib.request

데이터를 보낼 때 인코딩하여 바이너리 형태로 보낸다
없는 페이지를 요청해도 에러를 띄운다
url = 'https://newsstand.naver.com/?list=&pcode=011'
req = urllib.request.Request(url)
print('url을 get으로 받아온 형태는: ', req)
html = urllib.request.urlopen(req).read()
print('get으로 받아온 후의 내용을 추출한 것은: ', html)

soup = bs(html, 'html.parser')
print('Beautifulsoup의 html parser을 이용해 나온 형태는: ', soup)

# 없는 페이지 요청시
url = 'https://newsstand.naver.com/?list=&pcode=011/123'
req = urllib.request.Request(url)
html = urllib.request.urlopen(req).read()
soup = bs(html, 'html.parser')
soup

requests와 urllib.request 간에 큰 차이가 없어보입니다만 대체로 requests를 많이 쓰는 것 같네요. 저도 requests.get() 방법이 HTTP method와 연관되어 있으니 직관적으로 이해하기 쉽다고 느꼈습니다. 

참고로 requests.get()을 통해 받아온 객체 안에 무엇이 있는지 보기 위해선 아래 명령어를 사용해서 확인하면 됩니다.

dir(req)
# req.text

728x90
반응형