| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- INSERT
- MacOS
- 순열
- barh
- matplotlib
- pandas
- maplotlib
- Folium
- 등비수열
- 머신러닝
- 통계학
- 조합
- numpy
- Slicing
- 스터디노트
- 문제풀이
- SQL
- DataFrame
- 리스트
- pandas filter
- tree.fit
- 재귀함수
- pandas 메소드
- 자료구조
- Machine Learning
- python
- plt
- 등차수열
- 파이썬
- 기계학습
Archives
- Today
- Total
코딩하는 타코야끼
[스터디 노트] Week6_1일차 [unit1 ~ 13] - EDA(웹데이터) 본문
728x90
반응형
1. Beautiful Soup 기초와 웹데이터
- 파일로 저장된 html 파일을 읽을 때
- open : 파일명과 함께 읽기(r) / 쓰기(w) 속성을 지정
- html.parser : Beautiful Soup의 html을 읽는 엔진 중 하나(lxml도 많이 사용)
- prettify() : html 출력을 이쁘게 만들어 주는 기능

from bs4 import BeautifulSoup
page = open("../ds_study/unit3/data/03. test_first.html", "r").read()
soup = BeautifulSoup(page, "html.parser")
print(soup.prettify())
>>>
<!DOCTYPE html>
<html>
<head>
<title>
Very Simple HTML Code by PinkWink
</title>
</head>
<body>
<div>
<p class="inner-text first-item" id="first">
Happy PinkWink.
<a href="http://www.pinkwink.kr" id="pw-link">
PinkWink
</a>
</p>
<p class="inner-text second-item">
Happy Data Science.
<a href="https://www.python.org" id="py-link">
Python
</a>
</p>
</div>
<p class="outer-text first-item" id="second">
<b>
Data Science is funny.
</b>
</p>
<p class="outer-text">
<b>
All I need is Love.
</b>
</p>
</body>
</html>
📍 find_all( )
- 지정된 태그를 모두 찾아준다
soup.find_all("p")
>>>
[<p class="inner-text first-item" id="first">
Happy PinkWink.
<a href="http://www.pinkwink.kr" id="pw-link">PinkWink</a>
</p>,
<p class="inner-text second-item">
Happy Data Science.
<a href="https://www.python.org" id="py-link">Python</a>
</p>,
<p class="outer-text first-item" id="second">
<b>
Data Science is funny.
</b>
</p>,
<p class="outer-text">
<b>
All I need is Love.
</b>
</p>]
soup.find_all(class_ = "outer-text")
>>>
[<p class="outer-text first-item" id="second">
<b>
Data Science is funny.
</b>
</p>,
<p class="outer-text">
<b>
All I need is Love.
</b>
</p>]
⚡️ 이렇게 사용하는 경우가 많다.
soup.find_all(id = "first")
>>>
soup.find_all(class_ = "outer-text")
1
soup.find_all(class_ = "outer-text")
[<p class="outer-text first-item" id="second">
<b>
Data Science is funny.
</b>
</p>,
<p class="outer-text">
<b>
All I need is Love.
</b>
</p>]
# HTML 내에서 속성 id는 딱 한 번만 나타난다
# 그래서 find_all() 함수는 의미가 없다
# 단, 검색결과를 list로 받고 싶다면 id라도 find_all() 함수를 사용한다
soup.find(id = "first")
>>>
<p class="inner-text first-item" id="first">
Happy PinkWink.
<a href="http://www.pinkwink.kr" id="pw-link">PinkWink</a>
</p>
📍 응용
for each_tag in soup.find_all("p"):
print("-"*40)
# print(each_tag.text) 와 같음
print(each_tag.get_text())
>>>
----------------------------------------
Happy PinkWink.
PinkWink
Happy PinkWink.
PinkWink
----------------------------------------
Happy Data Science.
Python
Happy Data Science.
Python
----------------------------------------
Data Science is funny.
Data Science is funny.
----------------------------------------
All I need is Love.
All I need is Love.
2. 크롬 개발자 도구 이용하기
from bs4 import BeautifulSoup
from urllib.request import urlopen
# 웹주소(URL)에 접근할 때는 urllib의 request 모듈이 필요하다
url = "<https://finance.naver.com/marketindex/>"
page = urlopen(url)
soup = BeautifulSoup(page, "html.parser")

soup.find_all("span", "value")
>>>
[<span class="value">1,307.50</span>,
<span class="value">920.48</span>,
<span class="value">1,437.73</span>,
<span class="value">181.65</span>,
<span class="value">142.3400</span>,
<span class="value">1.1001</span>,
<span class="value">1.2767</span>,
<span class="value">101.8300</span>,
<span class="value">82.82</span>,
<span class="value">1688.98</span>,
<span class="value">1976.1</span>,
<span class="value">81398.14</span>]
soup.find_all("span", "value")[0].string
>>>
'1,307.50'
📍 str 구하기
# 같은 메소드
print(soup.find_all("span", {"class":"value"})[0].text)
print(soup.find_all("span", {"class":"value"})[0].string)
print(soup.find_all("span", {"class":"value"})[0].get_text())
>>>
1,307.50
1,307.50
1,307.50
3. list 데이터형
- List 형은 대괄호로 생성한다.
- List 형을 반복문(for)에서 사용하는 방법이 다른 언어에 비해 편하다.
- in 명령으로 조건문 (if)에 적용하느 것도 역시 다른 명령에 비해 편하다.
if "blue" in colors:
print(True)
>>>
True
📍list.append( )
- list 제일 뒤에 하나 추가한다.
movies.append("윈더")
print(movies)
>>>
['그린 북', '가버나움', '디지몬 어드벤처 라스트 에볼루션: 인연', '먼 훗날 우리', '윈더']
📍 list.pop( )
- list 제일 뒤 자료를 지운다.
movies.pop()
print(movies)
>>>
['그린 북', '가버나움', '디지몬 어드벤처 라스트 에볼루션: 인연', '먼 훗날 우리']
📍 list.extend( )
- list 제일 뒤 다수의 자료를 추가한다.
movies.extend(["베일리 어겐", "아일라", "당갈"])
print(movies)
>>>
['그린 북', '가버나움', '디지몬 어드벤처 라스트 에볼루션: 인연', '먼 훗날 우리', '베일리 어겐', '아일라', '당갈']
📍 list.remove( )
- list에서 같은 이름의 자료를 지운다.
movies.remove("가버나움")
print(movies)
>>>
['그린 북', '디지몬 어드벤처 라스트 에볼루션: 인연', '먼 훗날 우리', '베일리 어겐', '아일라', '당갈']
📍 Slicing
- [n:m] n 번째 부터 m-1까지
movies[2:5]
>>>
['먼 훗날 우리', '베일리 어겐', '아일라']
📍 list.insert( )
- 원하는 위치에 자료를 삽입한다.
movies.insert(2, 1000)
print(movies)
>>>
print(movies)
['그린 북', '디지몬 어드벤처 라스트 에볼루션: 인연', 1000, '먼 훗날 우리', '베일리 어겐', '아일라', '당갈']
📍list 안에 list를 가질 수 있다.
movies.insert(3, ["비고 모텐슨", "마허샬라 알리", "린다 카델리니"])
print(movies)
>>>
['그린 북', '디지몬 어드벤처 라스트 에볼루션: 인연', 1000, ['비고 모텐슨', '마허샬라 알리', '린다 카델리니'], '먼 훗날 우리', '베일리 어겐', '아일라', '당갈']
📍 instance( )

- isinstance()는 Python의 내장 함수로, 주어진 객체가 주어진 클래스 또는 데이터 타입의 인스턴스인지를 검사합니다. - 이 함수는 객체의 타입을 확인할 때 유용하게 사용됩니다.
- object: 타입을 확인하고자 하는 객체.
- classinfo: 단일 클래스 또는 데이터 타입, 또는 클래스 또는 데이터 타입의 튜플.
isinstance(movies, list)
>>>
True
isinstance(movies, int)
>>>
False# 여러 타입과의 비교 가능
isinstance(movies, (int, list))
# 여러 타입과의 비교 가능
isinstance(movies, (int, list))
>>>
True
- 결론적으로, isinstance()는 객체의 타입을 안전하게 확인하거나, 객체가 여러 가능한 타입 중 하나에 속하는지 검사할 때 매우 유용합니다.
반응형
'zero-base 데이터 취업 스쿨 > 스터디 노트' 카테고리의 다른 글
| [스터디 노트] Week6_3일차 [unit1 ~ 13] - EDA(유가 분석) (2) | 2023.08.16 |
|---|---|
| [스터디 노트] Week6_2일차 [unit14 ~ 20] - EDA(웹데이터) (2) | 2023.08.16 |
| [스터디 노트] Week5_5일차 [unit22 ~ 32] - EDA(범죄) (2) | 2023.08.16 |
| [스터디 노트] Week5_4일차 [unit14 ~ 21] - EDA(범죄) (0) | 2023.08.16 |
| [스터디 노트] Week5_3일차 [unit1 ~ 11] - EDA(범죄) (0) | 2023.08.16 |