1. 이론
1) 코드 내 이론
크롤링(스크래핑) 기본 세팅
import urllib.request
from urllib.request import urlopen
from bs4 import BeautifulSoup
# 크롤링할 웹페이지 불러오기
soup = BeautifulSoup(urlopen(url), "lxml") #"html.parser","lxml","xml","html5lib" 택1
# html 불러오기
soup.find(name=태그명, attrs={key:value}) # attrs에 class or id
soup.find_all(name=태그명, attrs={key:value}) # 다불러오기
2) 그 외 이론
크롤링 vs 브라우징(검색)
dif = 사람의 개입이 있으면 브라우징
| 자료구조 | 텍스트 | 집합 | 정렬 | 데이터묶기 | 
| 시퀀스 | 플레인텍스트 | 책 | 버블정렬 | 인덱싱 | 
| 해쉬 | 하이퍼텍스트 | 웹(검색) | 퀵정렬 | 매핑 | 
** 네트워크(인터넷) + 데이터 = 웹
**주소창(string)에서 ‘?’ 뒤에 있는 거 = query string
3) 놓친 거
리스트는 수정 해야할 때는 iterator, 그냥 뽑아 쓸때는 enumerator가 편함??
마크업 vs 마크다운
2. 코드
<scrapper 패키지>
init
from util.common import Common
from scrapper.view import MenuController
if __name__ == '__main__':
    api = MenuController
    while True:
        menus = ["종료", "벅스뮤직", "멜론뮤직"]
        menu = input("메뉴 선택: ")
        if menu == "0":
            api.menu_0(menus[0])
            break
        elif menu == "1":
            api.menu_1("<https://music.bugs.co.kr/chart/track/day/total>")
        elif menu == "2":
            api.menu_2("<https://www.melon.com/chart/index.htm>")
        else:
            print(" ### 해당 메뉴 없음 ### ")domain
import urllib.request
from urllib.request import urlopen
from bs4 import BeautifulSoup
"""
지원하는 Parser 종류
"html.parser" : 빠르지만 유연하지 않기 때문에 단순한 HTML문서에 사용합니다.
"lxml" : 매우 빠르고 유연합니다.
"xml" : XML 파일에만 사용합니다.
"html5lib" : 복잡한 구조의 HTML에 대해서 사용합니다.
"""
class BugsMusic: # 함수형이 아닌 객체지향형으로 만든 건 db에 저장하겠다는 뜻
    def __init__(self, url):
        self.url = url
    def scrap(self): # 정석
        soup = BeautifulSoup(urlopen(self.url), "lxml")
        title = {"class" : "title"}
        artist = {"class" : "artist"}
        titles = soup.find_all(name="p", attrs=title)
        artists = soup.find_all(name="p", attrs=artist)
        [print(f"{i+1} {titles[i].find('a').text} {j.find('a').text}\\n") for i,j in zip(range(len(titles)),artists)]
class MelonMusic:
    def __init__(self, url):
        self.url = url
        self.headers = {'User-Agent' : "Mozilla/5.0"}
    def scrap(self):
        soup = BeautifulSoup(urlopen(urllib.request.Request(self.url, headers=self.headers)), "lxml")
        titles = soup.find_all(name="div", attrs={"class" : "rank01"})
        artists = soup.find_all(name="div", attrs={"class" : "rank02"})
        [print(f"{i+1} {titles[i].find('a').text} {j.find('a').text}\\n") for i,j in zip(range(len(titles)),artists)]view
from scrapper.domains import BugsMusic, MelonMusic
class MenuController(object):
    @staticmethod
    def menu_0():
        print("끗")
    @staticmethod
    def menu_1(arg):
        bugs = BugsMusic(arg)
        bugs.scrap()
    @staticmethod
    def menu_2(arg):
        melon = MelonMusic(arg)
        melon.scrap()
3. 하루마무리
크롤링 주간이 시작됐다.
크롤링 찍먹이라도 한 과거의 나에게 정말 감사하다.
간만에 뇌가 편한 수업을 받아서 그런지 하루종일 정신이 말짱하다.
선생님께서 막판에 데이터셋 비슷하게 뭔가 하셨는데 그건 내일의 내가 하겠지.
'비트캠프(AI아카데미) > TIL&WIL' 카테고리의 다른 글
| [비트캠프 - 클라우드 기반 AlaaS 개발자 과정] 9 10(DAY-18 19) TIL (0) | 2022.11.11 | 
|---|---|
| [비트캠프 - 클라우드 기반 AlaaS 개발자 과정] 22.11.08.(DAY-17) TIL (0) | 2022.11.08 | 
| [비트캠프 - 클라우드 기반 AlaaS 개발자 과정] 22.11.04.(DAY-15) TIL (0) | 2022.11.05 | 
| [비트캠프 - 클라우드 기반 AlaaS 개발자 과정] 22.11.03.(DAY-14) TIL (0) | 2022.11.04 | 
| [비트캠프 - 클라우드 기반 AlaaS 개발자 과정] 22.11.01.(DAY-12) TIL (0) | 2022.11.01 | 
 
										
									 
										
									
댓글