crawling 연습 1. 보그코리아

hyeyul·2020년 5월 13일
0

Crawling

목록 보기
1/2

beautifulsoup4, requests

웹 크롤링을 하기위해서는 먼저 beautifulsoup4을 설치해야한다.
BeautifulSoup은 html 코드를 Python이 이해하는 객체 구조로 변환하는 Parsing을 맡고 있고, 이 라이브러리를 이용해 우리는 제대로 된 '의미있는' 정보를 추출해 낼 수 있다.

새로운 가상환경을 만든 다음 그 곳에서 beautifulsoup4과 requests를 설치 (파이썬 requests 모듈은 간편한 HTTP 요청처리를 위해 사용하는 모듈)

pip install beautifulsoup4
pip install requests

새로 만든 디렉토리 crawling에서 crawling.py라는 파일을 연다.

@ crawling.py

from bs4 import BeautifulSoup
import requests

이렇게 임포트 해주고, 이제 본격적으로 웹크롤링을 해보자.
나는 "보그코리아"라는 곳에서 웹 크롤링을 해볼 것이다.
http://www.vogue.co.kr/category/fashion/page/2/
여기 주소에 들어가서 개발자도구를 열고, elements에 들어가서 원하는 부분의 태그를 찾는다.


@ crawling.py

from bs4 import BeautifulSoup
import requests

crawling_url = "http://www.vogue.co.kr/category/fashion/page/2"

# HTTP GET Resquest
response = requests.get(crawling_url)           

## BeautifulSoup으로 html소스를 python객체로 변환하기
## 첫 인자는 html소스코드, 두 번째 인자는 어떤 parser를 이용할지 명시.
bs = BeautifulSoup(response.text,'html.parser')

위의 코드는 url을 crawling_url라는 변수에 담고 을 response 변수에 담아준다.

여기서 잠깐, parser가 뭐지❓

Parsing

  • 언어학에서 parsing은 구문 분석이라고도하며 문장을 그것을 이루고 있는 구성 성분으로 분해하고 그들 사이의 위계 관계를 분석하여 문장의 구조를 결정하는 것
  • 데이터를 조립해 원하는 데이터를 빼내는 프로그램을 하는것
  • 컴퓨터 과학에서 parsing은 일련의 문자열을 의미있는 token(어휘 분석의 단위) 으로 분해하고 그것들로 이루어진 Parse tree를 만드는 과정
  • 어떤 문장을 분석하거나 문법적 관계를 해석하는 행위
  • 프로그램을 compile하는 과정에서 특정 프로그래밍 언어가 제시하는 문법을 잘 지켜서 작성하였는지 compiler가 검사하는 것

Parser

  • Parser는 Parsing을 하는 프로세서를 Parser라고 부른다.
  • 파서(parser)란 컴파일러의 일부로서 원시 프로그램즉, 컴퍼일러나 인터프리터에서 원시 프로그램을 읽어 들여, 그문장의 구조를 알아내는 구문 분석(parsing)을 행하는 프로그램을 말한다.

다시 돌아가서, 그럼 html.parser은 HTML 문법 규칙에 따른 문자열을, 해당 문법을 바탕으로 단어의 의미나 구조를 분석하는 것인데 파이썬 기본으로 내장되어 있기때문에 이를 사용하면 된다.

find_all()

이 함수를 사용하면 원하는 부분을 뜯어낼 수 있다.


@ crawling.py

from bs4 import BeautifulSoup
import requests

crawling_url = "http://www.vogue.co.kr/category/fashion/page/2"

# HTTP GET Resquest
response = requests.get(crawling_url)           

## BeautifulSoup으로 html소스를 python객체로 변환하기
## 첫 인자는 html소스코드, 두 번째 인자는 어떤 parser를 이용할지 명시.
bs = BeautifulSoup(response.text,'html.parser')

## 'article'과 'id'에 'post-'로 되어있는 것을 모두 가져오기
article_list = bs.find_all('article',{'id':re.compile('post-*')})

for article in article_list:
	h2_title = article.find_all('h2')
    real_title = h2_title[0].text
    img = article.find('img')
    image_url = img['src']
    
    

또 이 중에서 제목만 가져오려면 아래 코드를 작성하면 된다.
그리고

print("h2_title=",end=""),print(h2_title)

이렇게 하면 아래처럼 결과가 나온다.

real_title = h1_title[0].text
real h2=랄프 로렌의 ‘지구를 지켜라!’
real h2=영원한 클래식, 샤넬 재킷
real h2=세계가 주목하는 디자이너 #황록
real h2=SOFT STEP
real h2=발렌시아가의 디렉터 뎀나 바잘리아가 찾은 안식처
real h2=SNS가 탄생시킨 패션 스타 토모 코이즈미의 네버랜드
real h2=디자이너 스테파노 필라티의 방황
real h2=In The Bag CHANEL 19
real h2=깔끔한 스틸 시계 뭐 사지?
real h2=주얼리가 머무는 자리
real h2=지구상에서 가장 핫한 슈퍼모델, 벨라 하디드
real h2=Night

또, 이미지를 가져오고 싶으면

img = article.find('img')
image_url = img['src']

이렇게 article내에 img를 찾아내고 img의 'src' 부분만 image_url이라는 변수에 담아준다.

csv파일에 저장

CSV 파일을 읽기 위해서는 먼저 파이썬에 기본 내장된 csv 모듈을 import 한다.
CSV 파일을 쓰기 위해서는 .csv 파일을 쓰기모드로 오픈하고 파일객체를 csv.writer(파일객체) 에 넣으면 된다. CSV writer는 writerow() 라는 메서드를 통해 list 데이터를 한 라인 추가하게 된다.

import csv
 
  csv_filename = "vogue_fashion.csv"   ## 파일이름 변수에 담아준다.
  csv_open = open(csv_filename, "w+", encoding='utf-8')  ## 
  csv_writer = csv.writer(csv_open)
  csv_writer.writerow(('title','image_url'))
  
 .
 .
 .
 for article in article_list:
	h2_title = article.find_all('h2')
    real_title = h2_title[0].text
    img = article.find('img')
    image_url = img['src']
    csv_writer.writerow( (real_title, image_url) )
    
 # 마지막에 이렇게 close()를 해줌
 csv_open.close()

여기서 가장 중요한 것은 csv파일에 저장할때 csv_writer.writerow()을 꼭 for문 안에 넣어줘야 저 데이터들이 csv파일 안에 잘 넣어질 수 있다.

0개의 댓글