본문 바로가기
프로그래밍언어/Python

[Python] : 웹 크롤링

by 오주현 2021. 11. 17.
반응형
웹 크롤링

 

파이참에서 상단 메뉴 FIle 에서 Settings를 눌러줍니다.

 

Project Interpreter을 선택해 주고 좌측 상단에 + 버튼을 눌러줍니다.

 

bs4를 선택하고 Install을 합니다.

 

성공 메시지가 떴습니다.

정상적으로 다운이 됐습니다.

 

네이버에서 특정 글자 추출하기

import urllib.request

url = "https://www.naver.com/"
html = urllib.request.urlopen(url)

print(html.read())

웹에서 데이터를 받아오려면 http request라는 요청을 보내서 받아와야 합니다.

 

파이썬에서 웹의 특정 주소로 요청을 보내는 기능이 urlib.request입니다.

 

urlib.reqeuest의 urlopen 함수로 네이버 첫 페이지를 불러옵니다.

 

html = urllib.request.urlopen(url)

에서 html이라는 변수 안에 텍스트 형식으로 네이버 첫 페이지를 호출한 데이터가 문자열 형태로 저장됩니다.

 

뷰티풀숍에 데이터 넣기

 

import urllib.request
import bs4

url = "https://www.naver.com/"
html = urllib.request.urlopen(url)

bs_obj = bs4.BeautifulSoup(html, "html.parser")

print(bs_obj)

urlopen() 함수를 이용해 URL을 호출한 데이터를 불러왔습니다.

 

이 데이터를 파싱하기 위해 뷰티솝에 데이터를 넣은 후 파이썬에서 가공할 수 있는 형태로 만들어야 합니다.

 

bs4.BeautifulSoup()

 

에 웹에서 받은 텍스트를 html 변수에 넣습니다.

 

BeautifulSoup(<받은 텍스트>,<텍스트를 파싱할 파서>)

에는 2개의 값이 들어가 있습니다.

첫 번쨰는 웹에서 받은 텍스트, 두 번쨰는 데이터를 뽑아내는 (파싱) 프로그램인 "html.paeser"입니다.

 

뷰티풀솝으로 필요한 부분 뽑아내기

크롬에서 개발자모드를 켜주고 마우스 누르는 아이콘을 선택해 네이버를 시작페이지로 글자를 눌러주면 링크가 나옵니다.

 

HTML 소스를 분석해 보면 <div > 태그 안에 <a> </a>가 들어 있습니다.

 

<div> 태그 안에 class="service_area"는 속성이라고 하고 Class= 로 시작하므로 클래스 속성, 클래스 라고 부릅니다.

 

 

import urllib.request
import bs4

url = "https://www.naver.com/"
html = urllib.request.urlopen(url)

bs_obj = bs4.BeautifulSoup(html, "html.parser")

top_right = bs_obj.find("div", {"class" : "service_area"})

print(top_right)

파이썬에서 <div> 영역을 추출합니다.

 

import urllib.request
import bs4

url = "https://www.naver.com/"
html = urllib.request.urlopen(url)

bs_obj = bs4.BeautifulSoup(html, "html.parser")

top_right = bs_obj.find("div", {"class" : "service_area"})

first_a = top_right.find("a")

print(first_a.text)
top_right = bs_obj.find("div", {"class" : "service_area"})

.find() 명령어를 <div> 태그 중에 class가 service_area인 첫 번쨰로 나오는 div를 찾으라는 명령입니다.

 

div 태그 안에는 <a> 태그가 있으므로 .find() 명령어 첫번째에 나오는 a태그를 찾은 뒤에 first_a.text로 a태그 안에 있는 text만 뽑아 냅니다.

반응형

댓글