배고픈 개발자 이야기
[2021/07/12] 파이썬 기초 (가변인자, BS4크롤링) 본문
- 가변인자
위의 링크에 정리가 정말 잘 되어 있다.
numbers = 1, 2, 3, 4, 5 # 왼쪽과 같이 대입하면 튜플 변수가 생성된다
# (1, 2, 3, 4, 5)
a, b, c, d, e = numbers # 각각 변수에 하나씩 할당
a, _, _, d, _ = numbers # 불필요한 부분 언더바로 제외하고 할당 a = 1, d = 4
# 가변인자를 활용하여 변수 할당
a, b, *rest = numbers # [3, 4, 5] list
a, *rest, b = numbers # [2, 3, 4] list
- 가변인자 (*args) 만들기
여기서 *y는 unpacking을 할 때 붙는 기호로 사용된다. (리스트 -> 튜플)
def print_numbers(*args):
print("args = ", args)
for arg in args:
print("=" * 100)
print("arg = ", arg)
print("=" * 100)
print("$" * 100)
y = [10, 20, 30, 40]
print_numbers(*y) # == print_numbers(10, 20, 30, 40)
위의 *로 list를 unpacking하는것 마냥 아래에선 **y를 통해 dictionary를 unpacking 한다.
def personal_info(**kwargs):
print("kwargs = ", kwargs)
for key, value in kwargs.items():
print("=" * 100)
print("key = ", key)
print("value = ", value)
print("=" * 100)
print("$" * 100)
personal_info(hobby='게임', first_name='길동', last_name='홍', national='한국')
y= {"job" : "회사원", "company":"SK Infosec", "salary":"40000"}
personal_info(**y)
- 크롤링 (웹)
pip install beautifulSoup4
import urllib.request
response = urllib.request.urlopen("https://www.naver.com")
response.read()
# html read
mem = urllib.request.urlopen("https://t1.daumcdn.net/cfile/tistory/9982424C5F56648032").read()
# image read
with open("mem고양이.jpg", mode="wb") as f:
f.write(mem)
# image save
site_source(HTML 태그)에서 원하는 내용을 꺼내주는 BeautifulSoup 객체 만들어줌
site_source = """
<html>
<body>
<h1>스크래핑이란?</h1>
<p>원하는 부분 추출하는것</p>
</body>
</html>
"""
객체로 원하는 태그의 값들을 여러 형태로 불러올 수 있다. (1번째 방법)
from IPython.core.display import display, HTML
display(HTML(site_source)) # 사이트 화면 표출
import bs4
soup = bs4.BeautifulSoup(site_source, "html.parser")
soup.h1
soup.h1.string
soup.body
sample HTML
page_source = """
<html>
<body>
<h1 id="title1">스크래핑이란?</h1>
<p id="body1">웹페이지를 분석하는것</p>
<p>원하는 부분을 추출 하는것</p>
<h1 id="title2">제목2</h1>
<p id="body2">본문2</p>
<p>본문3</p>
</body>
</html>
"""
id find test
soup = BeautifulSoup(page_source, "html.parser")
soup.find(id="title1")
soup.find(id="title1").string
soup.find(id="body1")
soup.find(id="body1").string
sample HTML
page_source = """
<html>
<body>
<span>난 span</span>
<ul class="greet">난 ul 글씨여
<li>hello</li>
<li>bye</li>
<li>welcome</li>
</ul>
<ul class="reply">
<li>ok</li>
<li>no</li>
</ul>
<div>
<ul>
<li>open</li>
<li>close</li>
</ul>
</div>
</body>
</html>
"""
tag find 및 전체 태그 검색
soup = BeautifulSoup(page_source, "html.parser")
soup.find('div')
ls = soup.find('ul')
ls.text
print(ls.text) # 예쁘게 출력
soup.find("ul") # 첫번째 태그를 찾음
soup.find("ul").text
soup.find("span").string
soup.findAll("li") # 모든 li태그 찾아서 리스트에 담아서 리턴
for item in soup.findAll("li"):
print("=" * 100)
print("item = ", item)
print("item.string = ", item.string)
print("item.text = ", item.text)
print("=" * 100)
reply class 하위에 있는 li tag만 찾는 방법
ul_reply = soup.find("ul", {"class":"reply"})
ul_reply.findAll("li")
네이버 nav_list 목록 긁어오기
화면에 개발자도구(F12 활성화 후) 원하는 위치(우클릭)의 태그 가져오기
##NM_FAVORITE > div.group_nav > ul.list_nav.type_fix
긁어오는 파이썬 코드
response = urllib.request.urlopen("https://www.naver.com") # 네이버에 urlopen 요청보내 데이터 받기
soup = BeautifulSoup(response, "html.parser") # bs4로 받은데이터 parsing 하기
list_nav = soup.find("ul", {"class":"list_nav"}) # 해당 위치의 상위 태그 클래스 찾기
for item in list_nav.findAll("li"): # 하위 태그 목록 모두 긁어와 아래와 같이 출력하기
print("=" * 100)
print("item.text.strip() = ", item.text.strip())
print("=" * 100)
결과
==================================================================================================== item.text = 메일 ==================================================================================================== ==================================================================================================== item.text = 카페 ==================================================================================================== ==================================================================================================== item.text = 블로그 ==================================================================================================== ==================================================================================================== item.text = 지식iN ==================================================================================================== ==================================================================================================== item.text = 쇼핑 ==================================================================================================== ==================================================================================================== item.text = 쇼핑LIVE ==================================================================================================== ==================================================================================================== item.text = Pay ==================================================================================================== ==================================================================================================== item.text = TV ====================================================================================================
'인포섹 아카데미' 카테고리의 다른 글
[2021/07/14] 정형/비정형 데이터 처리 (0) | 2021.07.14 |
---|---|
[2021/07/13] 파이썬 기초 (스크래핑, pyplot) (0) | 2021.07.13 |
[2021/07/09] 파이썬 기초 (0) | 2021.07.09 |
[2021/07/08] 파이썬 기초 (반복문) (0) | 2021.07.08 |
[2021/07/07] 파이썬 기초 (if, 리스트) (0) | 2021.07.07 |