카테고리 없음

파이썬으로 웹 스크랩핑하기(Web scraping, beautifulsoup4)

상어군 2022. 9. 13. 22:21
반응형

1. 라이브러리 인스톨

beautifulsoup4 인스톨하기

pip install beautifulsoup4

2. 페이지 읽어오기

from urllib.request import urlopen
from bs4 import BeautifulSoup

url = '' # 스크래핑할 url

page = urlopen(url) # 해당 페이지 오픈 및 html 파일 가져오기
soup = BeautifulSoup(page, "html.parser") # html형식에 대한 파싱

3. 페이지 파싱하기

3.1 예시 페이지 준비

page = '''
<html>
<head>
    <title>제목</title>
</head>
<body>
<h1>제목1</h1>
    <p>내용2</p>
<h1 class='red'>제목2</h1>
    <p class='blue'>
    	<a href="http://주소" class="web" id="shark">세부내용</a>
    </p>
</body>
</html>
'''

3.2 페이지 파싱하기

from urllib.request import urlopen
#from bs4 import BeautifulSoup

#준비된 예시 page로 대체
#url = 'https://movie.naver.com/movie/sdb/rank/rmovie.naver'
#page = urlopen(url)

soup = BeautifulSoup(page, "html.parser")

# 첫번째 tag <h1>을 찾는다
tmp = soup.find("h1")
print('첫번째 tag <h1>을 찾는다')
print(tmp,'\n')

# 모든 tag <h1>을 찾는다
tmp = soup.find_all("h1")
print('모든 tag <h1>을 찾는다')
print(tmp,'\n')

# class red를 가지는 tag <h1>을 찾는다
tmp = soup.find("h1",{'class':'red'})
print('class red를 가지는 tag <h1>을 찾는다')
print(tmp)

find_all은 list를 반환하며 find는 한개의 값을 반환한다

이때 반환된 값은 문자열이 아니다

 

3.3 파싱값 세부 파싱

from urllib.request import urlopen
from bs4 import BeautifulSoup

#준비된 예시 page로 대체
#url = 'https://movie.naver.com/movie/sdb/rank/rmovie.naver'
#page = urlopen(url)

soup = BeautifulSoup(page, "html.parser")

# class blue를 가지는 tag <p>을 찾는다
tmp = soup.find("p",{'class':'blue'})
print('class blue를 가지는 tag <p>을 찾는다')
print(tmp,'\n')

# tmp 내에서 tag <a>를 찾는다
sub_tmp = tmp.find("a")
print('tmp 내에서 tag <a>를 찾는다')
print(sub_tmp,'\n')

# 찾은 tag<a>의 id값
print(sub_tmp.get('id'),'\n')

# 찾은 tag<a>의 href값
print(sub_tmp.get('href'),'\n')

# 찾은 tag<a>의 내용
print(sub_tmp.text)

# 비슷한 명령어로
# .get(key값)은 .attrs[key값] 으로 대체 가능하다

4. 파일 다운로드

from urllib.request import urlretrieve

img_url = '~~~.jpg' # 이미지 주소 

urlretrieve(img_url, "movie.jpg")
반응형