1. Crawling

1. 크롤링 (Crawling)

  • 크롤링(Crawling), 스크레이핑(Scraping)은 웹 페이지의 데이터를 추출하는 행위
  • 크롤링 소프트웨어를 크롤러(Crawler)라고 부름

본 크롤링은 Python을 기반으로 함

2. urllib · request

1) 이론

  • urllib, request 모듈은 다이제스트 인증, 리디렉션, 쿠키등과 같은 URL이나 HTTP를 여는 데 도움이 되는 함수와 클래스
  • urlib.request를 사용하면 간단하게 웹 페이지 요청 및 데이터를 가져오는 것이 가능함

2) 실습 (urllib)

(1) urlopen

  • HTTP 요청을 보내고 응답을 반환값으로 반환
    반환 값은 변수에 저장해서 출력 가능

  • urllib 라이브러리 설치
pip install ullib3


  • 네이버 html 가져오기
from urllib.request import urlopen

response = urlopen('http://www.naver.com')
print(response.read().decode("utf-8"))


  • 현재 네이버의 html 정보를 가져온 모습

(2) response.status

  • urlopen을 통해서 전달받은 response 객체에서 status는 HTTP 응답 코드를 저장
from urllib.request import urlopen 

response = urlopen('http://www.google.co.kr')
print(response.status)

http 응답 코드설명
100진행중
200성공
400클라이언트 오류
500서버 오류

(3) urlretrieve

  • urlretrieve를 활용하여 우리는 url이 가리키는 주소에 접근해서 해당 자원을 로컬 컴퓨터에 저장 가능
  • 이것을 활용하여 이미지도 저장 가능
import urllib.request

url = "https://search.pstatic.net/sunny/?src=https%3A%2F%2Fi3.ruliweb.com%2Fimg%2F21%2F12%2F01%2F17d7164b9c05024a1.jpg&type=sc960_832"
savename = "./여자가말대꾸.jpg"

image = urllib.request.urlopen(url).read()

with open(savename, mode="wb") as f:
    f.write(image)
    print('저장완료')
  • url에 원하는 이미지 주소를 적는다면 원하는 사진을 저장할 수 있음


P.S. 현재 네이버 사진은 저장이 가능하지만, 구글 사진은 저장이 안되고, 아래의 오류가 뜨는 모습을 확인할 수 있음

  • 해결 완료
import urllib.request

url = "https://w.namu.la/s/522e52e11fb15fab84cb581f2222a83c9fa3cb3f01913bf7c7bdad6c24384f55f51d8e4c4ac7ee4665fa42965f58ffe65b008ac9c46779c3e62655d81b740f2bf485ea32ef854b6025a3988aecf93773"
savename = "./여자가말대꾸.jpg"

req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'})
image = urllib.request.urlopen(req).read()

with open(savename, mode="wb") as f:
    f.write(image)
    print('저장완료')

3) requests

  • urllib와 마찬가지로 HTTP 요청을 보내고 응답을 받아올 수 있는 라이브러리
pip install requests

(1) get()

  • GET 메소드로 요청
import requests

response = requests.get("https://jsonplaceholder.typicode.com/users/1")

(2) post()

  • POST 메소드로 요청
import requests

response = requests.post("https://jsonplaceholder.typicode.com/users/1")

(3) status_code

  • 응답 코드 확인
import requests

response = requests.get("https://jsonplaceholder.typicode.com/users/1")
print(response.status_code)

좋은 웹페이지 즐겨찾기