1 requests 모듈
- HTTP 요청을 보내는데 사용되는 모듈
- HTTP: HyperText Transfer Protocol. 인터넷 상에서 데이터 주고 받는 데 사용되는 프로토콜.
- GET, POST, PUT, DELETE 의 메서드가 있지만, get과 post만 주로 사용.
- https://3.python-requests.org/
2 메서드: get, post
import requests
response_get = requests.get('https://api.example.com/data')
print(response_get.text)
data = {'key': 'value'}
response_post = requests.post('https://api.example.com/post', data=data)
print(response_post.status_code)
- 이렇게 get, post로 들고온 객체는 Response 객체.
get('url'): url에 파라미터들 포함. url에 데이터가 노출되고, 데이터 길이에 제한 있고, 보안에 취약.
post('url', data=data): url에 파라미터를 붙이지 않고, 별도 항목인 request body에 넣어서 요청한다. 상대적으로 보안에 강하다.
<form> 태그를 사용해서 사용자로부터 정보를 입력받는 경우, 서버로 전송해야 할 데이터의 용량이 클 때 사용.
- django에서 주로 사용한다.
3 URL 구조
https://search.naver.com/search.naver?query=weather
- https:/ : 프로토콜.
- /search.naver.com : 도메인(호스트). 웹 서버의 호스트명으로, 도메인명 또는 IP 주소로 표현된다.
- 포트번호: 웹 서버 내의 서비스 포트 번호. 생략시에는 디폴트 포트번호로 https는 443, http는 80 사용.
- /search.naver : 경로. 파일이나 앱의 경로를 의미.
- ?query = weather : 쿼리스트링. 질의 문자로, &로 구분된 이름=값 쌍 형식으로 표현된다.
4 실제 예시
5 관련 기능들
status_code: 응답 코드. 200은 성공, 404는 실패
res = requests.get('url')
res.status_code
6 urllib의 request 모듈
from urllib.request import Request, urlopen
url = Request(df['URL'][0], headers={'User-Agent':'Mozilla/5.0'})
html = urlopen(url)
soup_tmp = BeautifulSoup(html, 'html.parser')
- urllib의 request 모듈은 파이썬의 기본 모듈. requests는 외부 모듈로 다운 필요.
전자는 상대적으로 낮은 수준의 HTTP 요청 작업 수행, 후자는 사용자 친화적인 API 제공해서 HTTP 요청 보내는 과정을 더 단순화하고 다양한 기능 지원.
- 여기서
Request는 url을 받아서 Request 객체를 만드는 것.
header={'User-Agent':'Mozilla/5.0'} 부분은 헤더에 User-Agent 추가하는 것으로, 자신을 일반 웹브라우저 사용자로 가장해서 접근 제한 우회하는 방법. 이걸 빼면 웹사이트에서 요청 막힌다.
https://m.blog.naver.com/kiddwannabe/221185808375
urlopen은 URL 또는 Request 객체 받아서, 해당 리소스 열고 읽어서 => HTTP 응답을 나타내는 객체 (HTTP respnse객체)로
BeautifulSoup로 HTTP respnse 객체 받아서 BeautifulSoup 객체로 파싱. requests모듈을 썼으면 Response 객체. => 이게 html 문자열이다.