basic/python

python 04 [실습] 크롤링

못지(Motji) 2021. 8. 23. 22:43

❕ 기상청 RSS 검색해서 정보 가져오기

#0 기상청 RSS 검색하여 url 가져오기
'''
http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=108 전국
http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=109 서울 경기
파라미터 stnId : 지역파라미터
'''

#1 필요 라이브러리
import urllib.request as request
import urllib.parse

api = "http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp"
value = {"stnId":"109"}
param = urllib.parse.urlencode(value)
url = api + "?" + param
print("url:", url)

#2 정보 요청
data = request.urlopen(url).read()
txt = data.decode("utf-8")
print(txt)

# xml 파일이기 때문에 파싱을 해줘서 원하는 데이터를 찾기 쉽게 해줘야 한다.
# 데이터 수집만 진행

❕ requests, BeautifulSoup 사용하여 크롤링

# 라이브러리 임포트
import requests
from bs4 import BeautifulSoup

url = "https://www.naver.com"
res = requests.get(url)
print(res)
print(res.status_code)
print(res.headers)
print(res.cookies)
print(list(res.cookies))
#print(res.text)
print(res.content)
print(res.encoding)

# .get()
# 1. 쿼리스트링 만들어 요청 (*추천)
res = requests.get(url, params={"keys":"value1","key2":"value2"})
print(res.url)
# 2. 쿼리스트링 데이터 만들어 요청
url = "http://www.naver.com?key10=value10&key20=value20"
res = requests.get(url)
print(res.url)
# .post()
url = "http://www.naver.com"
requests.post(url,data={"keys":"value1","key2":"value2"})
print(res.url)
print(res.headers)

# data = json 형태로 보내기
import json
res = requests.post(url, data=json.dumps({"keys":"value1","key2":"value2"}))
print(res.status_code)

'''
request 에러
HTTPError : 경로에 http 빼먹었을때
ConnectionError : 서버, 사이트와 연결이 안된다, 연결문제
SSLError : 인증서오류
Timeout : 일정시간동안 서버가 응답을 안한다, 요청들어간 시간이 끝남
ConnectTimeout : 커넥션이 안될때
URLRequired : 유효한 url이 필요할때, url이 제대로 안들어감 또는 주소가 없거나 이상함
TooManyRedirects : 요청이 너무 많을때, 새로고침을 많이해도 이런에러 발생
'''

try:
    url = "naver.com"
    res = requests.get(url)
    print(res.status_code)
except requests.exceptions.HTTPError:
    print("http error")
except requests.exceptions.Timeout:
    print("timeout")
except requests.exceptions.MissingSchema:
    print("http 미작성")