[제로베이스 데이터취업스쿨 15기] Part. 4 EDA 스터디노트 -22(6.2.~6.3.)

DaHye CHOI·2023년 6월 3일
0

>⛹️‍♀️ 제로베이스 데이터취업스쿨 15기 스터디노트 22(6.2.~6.3.)

🗂️ 오늘까지(6.2.~6.3.) 수강한 분량

웹데이터 2~4

🗂️ 웹데이터 2~4 핵심 내용 정리

  • BeautifulSoup 예제 1-2. 네이버금융
    • find=select_one : 하나 찾기,find_all=select : 여러개 찾기
    • response = requests.get(url) # =requests.get(), requests.post() 
      soup = BeautifulSoup(response.text,"html.parser")
      print(soup.prettify())
  • 하위클래스 나타내기
    •   #id = # (id 불러오기)
      #class = . (class 불러오기)
      exchangeList = soup.select("#exchangeList> li") #>하위 클래스 나타내기 :>
      len(exchangeList), exchangeList
  • 4개의 데이터 수집 및 저장
    • exchange_datas = []
      bassedUrl = "https://finance.naver.com/"
      for item in exchangeList:
          data ={"title": item.select_one(".h_lst").text,
              "exchange" : item.select_one(".value").text,        
              "change" : item.select_one(".change").text,
              "updown" : item.select_one
              (".head_info.point_dn>.blind").text
              if str(type(item.select_one\
              (".head_info.point_dn >.blind"))) != "<class 'NoneType'>" \
                  else item.select_one(".head_info.point_up >.blind").text,
              "link" : baseUrl + item.select_one("a").get("href")}
          exchange_datas.append(data)
      df = pd.DataFrame(exchange_datas)
      df.to_csv("./naverfinance.csv", encoding = "utf-8") 
  • BeautifulSoup 예제2 - 위키백과 문서 정보 가져오기
    • req = Request(html.format(search_words = urllib.parse.quote("여명의_눈동자"))) : 글자를 url로 인코딩하기
    • 찾는 것(등장인물)이 들어가 있는 곳 찾기
    • n = 0
      for each in soup.find_all("ul"):
      	print("=>" + str(n) + "=====================")
         print(each)
         n += 1 
  • Python List 데이터형
    • 종류
      -.append(): list 제일 뒤에 추가
      • .pop(): list 뒤의 자료 삭제
      • .extend(): list의 자료 추가(["",""])
      • .remove() : list의 특정 자료 삭제
      • movie[3:5] : 슬라이싱(3번째부터 4번째까지)
      • insert(1,9.60) : 자료 삽입(첫번째 인덱스에 9.60 삽입)
      • isinstance(d,list) : 자료형 리스트 여부 확인(True,False로 변환)
    1. 시카고 맛집 데이터 분석 -개요~하위페이지
    • from urllib.request import Request, urlopen
      from fake_useragent import UserAgent
      from bs4 import BeautifulSoup
      url_base = "https://www.chicagomag.com/"
      url_sub = "chicago-magazine/november-2012/best-sandwiches-chicago/"
      url = url_base + url_sub
      url
      ua = UserAgent()
      req = Request(url, headers={"User-Agent":ua.ie})
      html = urlopen(req)
      soup = BeautifulSoup(html,"html.parser")
      soup.prettify() #독타입부터 가져옴
    • soup.find_all("div","sammy"),len(soup.find_all("div","sammy")) # =soup.select(".sammy")
    • 전체 데이터를 위한 샘플링 먼저 진행
    • 형식에 맞춰 html 나누기 :re.split(("\n|\r\n"),tmp_string)
    • 필요한 내용을 리스트로 담아서 하나씩 컬럼을 만들고 데이터 프레임으로 합침
      rank = []
      main_manu = []
      cafe_name = []
      url_add = []
      list_soup = soup.find_all("div","sammy")
      for item in list_soup:
       rank.append(item.find(class_="sammyRank").get_text())
       tmp_string = item.find(class_="sammyListing").get_text()
       main_manu.append(re.split(("\n|\r\n"), tmp_string)[0])
       cafe_name.append(re.split(("\n|\r\n"), tmp_string)[1])
       url_add.append(urljoin(url_base, item.find("a")["href"]))
  • 컬럼 순서 변경
    df = pd.DataFrame(data, columns=["Rank","Cafe","Menu","URL"])
    df.tail(2)
  • import만 쓰는 경우는 제일 위에 표기하는 것이 보기 좋음
  • from~import:필요한 부분만 import하여 사용
  • < 정규표현식>
  • 구분설명
    .x임의의 한 문자 표현(x)가 마지막으로 끝남
    x+x가 한번 이상 반복
    x?x가 존재하거나 존재하지 않음
    x*x가 0번 이상 반복
    xy
  • price_tmp = soup_tmp.find("p","addy").text
    price_tmp
    #가격과 주소를 불러오기 위해 
    import re
    re.split(",",price_tmp)
    #값만 추출
    tmp = re.search("\$\d+\.(\d+)?",price_tmp).group() 
    price_tmp[len(tmp) + 2:] 
  • 최종 작성 완료 코드
from tqdm import tqdm
price = []
address = []
for idx, row in df.iterrows():
    req = Request(row["URL"], headers={"user-agent":"Chome"}) 
    html = urlopen(req).read()
    soup_tmp = BeautifulSoup(html, "html.parser")
    gettings = soup_tmp.find("p", "addy").get_text()
    price_tmp = re.split(".,", gettings)[0]
    tmp = re.search("\$\d+\.(\d+)?", price_tmp).group()
    price.append(tmp)
    address.append(price_tmp[len(tmp)+2:])
    print(idx)

👩‍🚀 스터디 감정 노트

바쁘다 바빠 현대사회중이여서 집중을 제대로 못하고 2일에 걸쳐 들었다😭😭 빨리 바쁜거 끝나고 다시 한번 더 봐야지😭

[이미지 출처 : 미리캔버스]

profile
데이터가 궁금한 비전공자의 데이터스터디🫠

0개의 댓글