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())

>> 페이지 없음