>⛹️♀️ 제로베이스 데이터취업스쿨 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로 변환)
- 시카고 맛집 데이터 분석 -개요~하위페이지
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번 이상 반복 x y 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일에 걸쳐 들었다😭😭 빨리 바쁜거 끝나고 다시 한번 더 봐야지😭
[이미지 출처 : 미리캔버스]