Part 04. EDA/웹 크롤링/파이썬 프로그래밍 - 03. 웹 데이터 수집하고 정리하기

하은·2023년 11월 8일
0

- Beautiful Soup for web data : 파이썬 유저들이 웹데이터 얻을 때 가장 많이 사용하는 모듈

  • html 태그는 웹페이지를 표현
  • head 태그는 눈에 보이진 않지만 문서에 필요한 헤더 정보를 보관
  • body 태그에는 눈에 보이는 정보를 보관
from bs4 import BeautifulSoup

page = open("", "r").read()
soup = BeautifulSoup(page, "html.parser")
print(soup.prettify())

파일로 저장된 html파일을 읽을 때
open: 파일명과 함께 읽기(r) / 쓰기(w) 속성을 지정
html.parser : BeautifulSoup의 html을 익는 엔진 중 하나
prettify(): html 출력을 이쁘게 만들어주는 기능; 들여쓰기 들어간 상태로 출력

  • soup.body
  • soup.find("p") : 하나만 찾아줌
    .findall()은 지정된 태그를 다 찾아줌
    (class
    ="outer_text) : p태그 안 특정 클래스만 찾을수 있음
    (id="first") : id는 하나. 이걸 더 많이 사용함
  • get_text() : 태그로 쌓여있는 글자를 가져오는 것
  • .find_all("a") : 외부로 연결되는 링크의 주소를 알아내는 방법
links = soup.find_all("a")
links

for each in links:
	href = each["href"]
    text = each.string
    print(text + "->" + href)

list 데이터형

- list 형은 대괄호로 생성한다

colors = ['red', 'blue', 'green]

b = colors
b

b[1] = 'black'
b

print(colors[0])
print(colors[2])
print(len(colors))

-->
['red', 'blue', 'green]

['red', 'black', 'green]

red
green
3

- list형을 반복문(for)에서 사용하는 방법이 다른 언어에 비해 쉽다

for color in colors:
	print(color)

-->
red
black
green

- in 명령으로 조건문(if)에 적용하는 것도 역시 다른 명령에 비해 쉽다

if 'black' in colors:
	print('True')

--> 
True

- append: list 제일 뒤에 하나 추가

movies = ['그린북', '가버나움', '디지몬', '먼훗날우리']
print(movie)

movies.append('윈더')
print(movie)

-->
['그린북', '가버나움', '디지몬', '먼훗날우리']
['그린북', '가버나움', '디지몬', '먼훗날우리', '윈더']

- pop: 제일 뒤 자료를 지움

movies.pop()
print(movie)

-->
['그린북', '가버나움', '디지몬', '먼훗날우리']

- extend: 제일 뒤에 다수의 자료를 추가

movies.extend(['베일리어겐', '아일라', '당갈'])
print(movie)

-->
['그린북', '가버나움', '디지몬', '먼훗날우리', 베일리어겐', '아일라', '당갈']

- remove: 같은 이름의 자료를 지움

movies.remove('가버나움')
print(movie)

-->
['그린북', '디지몬', '먼훗날우리', 베일리어겐', '아일라', '당갈']

- 슬라이싱: [n:m] n번째부터 m-1까지

print(movies[3:5])

favorite_movies = movies[0:3]
print(favorite_movies)

-->
['그린북', '디지몬', '먼훗날우리']

- insert: 원하는 위치에 자료를 삽입

favorite_movies.insert(1, 9.60)
print(favorite_movies)

favorite_movies.insert(3, 9.54)
print(favorite_movies)

favorite_movies.append(9.53)
print(favorite_movies)

-->
['그린북', 9.6, '디지몬', 9.54, '먼훗날우리', 9.53]

- list 안에 list를 가질 수 있다.

favorite_movies.insert(2, ['비고 모텐슨', '마히살라 알리', '린다 카델리니'])
print(favorite_movies)

-->
['그린북', 9.6, ['비고 모텐슨', '마히살라 알리', '린다 카델리니'], '디지몬', 9.54, '먼훗날우리', 9.53]

- isinstance: 자료형이 list인지 확인할 수 있다.

isinstance(favorite_movies, list)

-->
True

--

for each_item in favorite_movies:
	if isinstance(each_item, list):
    	for nested_item in each_item:
        	print(nested_item)
    else:
    	print(each_item)
        
-->
그린북
9.6
비고 모텐슨
마히살라 알리
린다 카델리니
디지몬
9.54
먼훗날우리
9.53

= 리스트 안에 리스트가 있더라도 전체적으로 풀어헤쳐서 하나씩 프린트하라는 코드

0개의 댓글