Python/[강의] 파이썬입문과 크롤링기초
크롤링 시 문제상황 대처
spring_sunshine
2022. 9. 12. 10:41
[기존] urllib + bs4 → [최근] requests + bs4
경우에 따라 예전 사이트의 경우는 urllib 로만 정상적으로 데이터를 가져오는 경우가 간혹 있음 (극히 드묾)
requests 라이브러리로 작성
import requests
from bs4 import BeautifulSoup
res = requests.get('https://~')
soup = BeautifulSoup(res.content, 'html.parser')
items = soup.select('요소')
- res는 request 받은 객체가 리턴되기 때문에 res.content로 보내야 한다.
urlllib 라이브러리로 작성
from urllib.requests import urlopen
from bs4 import BeautifulSoup
res = urlopen('https://~')
soup = BeautifulSoup(res, 'html.parser')
items = soup.select('요소')
- res에 리턴받은 데이터가 바로 들어오기 때문에 그대로 res를 보낸다.
HTTP response code (페이지 없는 경우 확인방법)
- HTTP 라는 프로토콜 규격에 따라서, 응답 데이터에 응답 코드(response code)를 넣어서 보내게 된다.
- requests 라이브러리의 경우, requests.get() 의 리턴변수.status_code 로 응답 코드를 확인할 수 있다.
- HTTP 규격에 따라 응답 코드가 200인 경우는 정상, 그렇지 않으면 문제가 있는 것이다.
import requests
from bs4 import BeautifulSoup
res = requests.get('https://davelee-fun.github.io/xxx')
if res.staus_code != 200:
print('페이지 없음')
else:
soup = BeautifulSoup(res.content, 'html.parser')
data = soup.select('요소')
for item in data:
print(item.get_text())
>> 페이지 없음