안녕하세요 3구입니다. 오늘의 내용은 네이버의 네비게이션 바 파싱하기입니다.  일단 밑에 사진처럼 메일, 카페, 블로그 ~TV까지 파싱할 예정입니다. 

일단 네이버에 들어가줍니다. 

 

네이버에 들어가서 ctrl + shift + i 를 눌러줍니다. 그러면 저런 형태로 보이게 됩니다.

그런 다음 1번을 클릭해준다음에 마우스를 메일, 카페~ TV에  갖다 놓으면 an_l이라는

문구가 보일 것입니다.

 

 

 

 

지금부터 메일 ~TV만 읽어서 파싱해보겠습니다.

import urllib.request
import bs4

url = "https://www.naver.com/" # 네이버의 url 
html = urllib.request.urlopen(url)  

bs_obj = bs4.BeautifulSoup(html, "html.parser") # 네이버를 읽어 옵니다.
 
ul = bs_obj.find("ul", {"class":"an_l"}) 
lis = ul.findAll("li")

for li in lis:
    a_tag = li.find("a")
    span = a_tag.find("span", {"class" : "an_txt"})
    print(span.text)
    

 

ul = bs_obj.find("ul", {"class":"an_l"})의 내용을 설명 드리겠습니다.

bs_obj(네이버 읽어온 것)에서 find를 이용해 찾습니다. ul을 찾고 classs의 an_l을 찾아서 ul변수라는 값에 저장해줍니다.

 

그런 다음 lis변수라는 값 안에 li의 모든 것(findAll)을 찾습니다.

 

그런 다음 for문을 이용해 출력합니다. 

a_tag = li.find("a")  lis의 부분의 "a"라는 것을 찾고 

span = a_tag.find("span", {"class" :"an_txt"})의 a를 찾았고

span의 class:an_txt를 찾습니다.

 print(span.text)를 이용해 출력합니다.

결과는 다음가 같습니다.

 

이상포스터를 마치겠습니다.

이번 장에서는 뷰티풀솝의 중요한 부분을 설명드리겠습니다.

 

바로 소스코드를 보겠습니다. 여기서 중요한 것은 .find입니다. 

import bs4
html_str = "<html><div>hello</div></html>"  

bs_obj = bs4.BeautifulSoup(html_str, "html.parser")

print(type(bs_obj))  #bs_obj 변수 타입 출력
print(bs_obj)  #<html> <div> ~~ 이부분 출력
print(bs_obj.find("div")) # 여기서 .find는 찾는다라는 뜻으로 해석하시면 됩니다. 즉, div를 찾는다.  

결과 

print의 결과

다음 예시를 보겠습니다. 

import bs4 html_str =
""" <html>
<body>
      <ul> <li>hello</li>
             <li>bye</li>
             <li>welcome</li>
       </ul>
</body
</html> """


bs_obj = bs4.BeautifulSoup(html_str ,"html.parser")
ul = bs_obj.find("ul")  #ul를 찾습니다.
li = ul.find("li") print(li)  # ul안에 li라는 것을 찾습니다.

#결과는 어떨까요?  분명 <li>hello</li>라는 것이 뜰겁니다. 
#저기서 li라는 곳이 거슬리지 않나요? 지구에서 소멸하는 방법^^을 알려드리겠습니다.
# .text속성을 사용하면 됩니다. 

print(li.text)

#findAll을 써보겠습니다. findAll은 모든 요소를 리스트[] 형태로 추출해주는 기능입니다.
li1 = ul.findAll("li")
print(li1[1]) # bye를 뽑기위한 인덱스 li1[0]은 뭐죠? <hello>입니다. 

# 분명 위의 print는 <li> bye</li>라는 결과가 나올 것입니다. <li>라는 부분을 없앨려면 어떻게 해야되죠? 

print(li[1].text) 

결과 

결과 

 

이런 식으로 결과가 뜨게 됩니다. 좀 지루하죠? 개념부터 차근차근이 하기에는 너무 많기 때문에 다음 절에는 점프해서 재밌는 것을 해보겠습니다. 하지만, beautifulsoup의 속성만 알아두면 좋을 것 같습니다. 

 

  • .find() 특정 한 곳을 찾는다.
  • .text  ex) print(li.text) html태그를 지워버린다. 위에 참조
  • .findAll()  모든 요소를 리스트[] 형태로 추출해주는 기능
  • 뷰티풀솝을 사용하려면 HTML지식이 있어야 일단 재미를 위해서 해봅시다. 

BeautifulSoup은 뭘까요?

뷰티풀솝데이터를 추출하는 데 필요한 기능이 들어 잇는 라이브러리입니다. 
그러면 라이브러리? 저건 뭔데 ? 

라이브러리(Library)

이미 만들어져 있는 것을 가져다 사용한다라고 보시면 됩니다. 예를 들어서 마우스를 조립한다는 가정하에 마우스를 처음부터 조립하고 만들어서 사용하는 게 아니라 누가 만들어놓은 것을 판매한다고 생각하시면 좋을 것 같습니다.

BeautifulSoup 설치

처음에 윈도우(모양) + R 을 눌릅니다. 눌른후 cmd를 입력합니다.

윈도우(모양) + R 
pip install beautifulsoup4 설치 

pip install beautifulsoup4 를 합니다. 저는 이미 설치해놔서 설치할 것이 없습니다. 

 

#오류 만약 오류가 뜨게 된다면 파이썬을 설치를 안 했다던가, 환경변수를 설정 안 하셨거나 둘 중에 하나입니다.

 

이상으로 beautifulsoup설치에 대해 마치겠습니다. 

써 보면서 공부하는 걸 추천드립니다. 

 

이 장에서는 네이버 첫 페이지의 데이터를 받아오는 크롤링을 한 번 보여드리겠습니다. 

 

파이썬을 실행해 봅시다. 파이썬을 설치 안 하신 분들은 파이썬 3.x 버전을 설치하시고 오시길 바랍니다. 파이참도 가능합니다. 

 

크롤링을 하는 프로그램을 '크롤러'라고 합니다. 

 

네이버 전체 크롤링 하기 

 

결과는 다음과 같습니다. 

네이버 크롤링

이 텍스트를 웹 브라우저에서 해석해서 초록색으로 배치가 잘 된 네이버의 화면을 우리에게 보여주는데요 웹은 대부분 HTML형태로 되어 있씁니다. HTML 텍스트를 받아온 다음에 여기에서 우리가 필요한 정보들을 파싱할 수 있습니다. 

 

다음 내용은 뷰티풀솝 사용 해서 파싱하는 것을 보여드리겠습니다. 

1. 크롬을 설치합니다. 

-> 크롬을 설치하는 이유는 크롬에 있는 개발자 도구가 크롤러를 만들 때 필요한 도구이기 때문입니다. 만약 다른 브라우저를 사용하신다고 하셔도 무관합니다. 

 

2. Urllib 설치합니다. 

->> urllib는 기본적으로 설치 되어 있습니다. 그래서 파이썬이 설치 되어 있다면 바로 import를 할 수 있습니다. 

 

3. 네이버 첫 페이지 받아오기 

naver.com에 접속을 합니다. 오른쪽 마우스 -> 페이지 소스 보기를 합니다. 그러면 밑에 사진 처럼 나옵니다.

네이버 페이지 소스 보기

이런 게 HTML형식 입니다. 웹 브라우저는 텍스트 형태로 되어 있는 HTML문서를 읽어서 우리가 보기 좋게 그려 주는 렌더링 (rendering)기능을 하는 프로그램입니다.

 

크롤링을 한다는 것은 HTML형태의 데이터를 받아오는 것을 말합니다. 받아온 데이터에서 내가 필요한 것을 뽑아내는 것을 '파싱'이라고 합니다. 

 

즉, 크롤링, 파싱, 스크래핑이 '인터넷에서 무언가 데이터를 받아서 필요한 정보만 뽑아 내는 것'이라고 생각하시면 됩니다. 

 

그러면 무슨 말을 쓰라는거야? 라는 생각을 하실 수 있습니다.

 

-> 저는 데이터를 받아오는 것을 '크롤링' 

-> 받아온 데이터에서 필요한 정보를 뽑아내는 것을 '파싱' 

 

이라고 결론 짓겠습니다. 

+ Recent posts