반응형

파이썬 웹 크롤링 / 네이버 현재 상영영화 정보 가져오기

 

네이버 Html 코드 분석

아래 링크에 들어가면 네이버 영화 정보를 볼 수 있습니다.

개발자 도구(F12)로 영화 검색어 순위에 대한 내용을 따라 들어가 보면 

lst_detail_t1 클래스 안에 현재 상영영화 정보가 있는 것을 알 수 있습니다. 

이 클래스 안의 영화 제목 정보를 가져와 출력하겠습니다. 

https://movie.naver.com/movie/running/current.naver

 

전체 코드

현재 상영영화 정보가 100개가 넘기 때문에 10개만 출력하도록 하였습니다. 

import urllib.request
from bs4 import BeautifulSoup

url = "https://movie.naver.com/movie/running/current.naver"
soup = BeautifulSoup(urllib.request.urlopen(url).read(), "html.parser")

ul = soup.find("ul", class_="lst_detail_t1").find_all("dt", class_="tit")
print(type(ul))

for i, title in enumerate(ul):
    print(i+1, ") ", title.get_text())
    if i+1 == 10:
        break

아래와 같이 출력되는 것을 볼 수 있습니다.

반응형
반응형

파이썬 웹 크롤링 / 네이버 영화 인기검색어 순위 가져오기

 

 

BeautifulSoup를 이용해 네이버 영화 인기검색어 순위를 가져오도록 하겠습니다. 

 

네이버 Html 코드 분석

아래 링크에 들어가면 네이버 영화 정보를 볼 수 있습니다. 

개발자 도구(F12)로 영화 검색어 순위에 대한 내용을 따라 들어가 보면 

keyword_obj first_child 클래스 안의 영화 인기검색어에 대한 정보가 있는 것을 알 수 있습니다. 

이 클래스 안의 영화 제목 정보를 가져와 출력해 보도록 하겠습니다. 

https://movie.naver.com/movie/running/current.naver

 

BeautifulSoup의 find 코드

keyword_obj first_child 클래스를 우선 찾고. 그 하위의 rank_tx에 영화 제목 정보가 있는 것을 알 수 있습니다. 

순위에 있는 모든 영화 제목을 가져와야 하기 때문에 find_all 함수를 사용합니다. 

ul = soup.find("div", class_="keyword_obj first_child").find_all("p", class_="rank_tx")

 

전체 코드

import urllib.request
from bs4 import BeautifulSoup

url = "https://movie.naver.com/movie/running/current.naver"
soup = BeautifulSoup(urllib.request.urlopen(url).read(), "html.parser")

ul = soup.find("div", class_="keyword_obj first_child").find_all("p", class_="rank_tx")
print(type(ul))
for i, title in enumerate(ul):
    print(i+1, "위 : " , title.get_text())

반응형
반응형

파이썬 웹 크롤링 / BeautifulSoup를 이용한 네이버 스포츠 야구 순위 정보 가져오기

requests 모듈을 이용해 네이버 스포츠 야구 순위를 가진 페이지 코드를 가져옵니다. 

BeautifulSoup 모듈을 이용해 가져온 페이지 코드를 파싱하고, 파싱된 순위 정보를 아래와 같이 표시하는 것을 알아보도록 하겠습니다.

네이버 스포츠 야구 순위 페이지에 대한 html 코드 정보 확인

우선 네이버 스포츠 야구 순위 페이지에 대한 html 코드 정보를 확인해 보겠습니다. 

아래 링크는 네이버 스포츠 야구 순위 정보를 표시하는 url입니다. 

https://sports.news.naver.com/kbaseball/record/index.nhn?category=kbo

 

네이버 스포츠

스포츠의 시작과 끝!

sports.news.naver.com

이 페이지에 들어가서 F12 키를 누르면 아래와 같이 html 코드를 확인할 수 있습니다. 

마우스로 html 코드에 올려 놓으면, 그 코드가 왼쪽의 어느 영역을 포함하는지 확인할 수 있습니다. 

tbody id = "regularTeamRecordList_table"을 가진 테이블에 순위 정보가 있는 것을 확인할 수 있습니다.

 

아래 코드를 통해, regularTeamRecordList_table 테이블의 구조를 알아보도록 하겠습니다. 

각 팀을 tr 태그로 구분하였고, 그 하위에 순위는 td, 나머지 구단이름, 경기수, 승, 패, 무승부 등등은 td 태그로 구분하였음을 알 수 있습니다.

url = "https://sports.news.naver.com/kbaseball/record/index.nhn?category=kbo"
res = req.urlopen(url).read()
soup = BeautifulSoup(res, 'html.parser')

print(soup) #파싱된 html 출력

 

BeautifulSoap 모듈의 find / findAll 함수를 이용해 정보 추출하기

우선 "regularTeamRecordList_table" 테이블을 찾고, 그 안에 있는 모든 "tr" 태그(각 팀 정보)를 찾습니다. 

각 팀 정보에는 순위 정보를 가진 th 태그 하나와 그 밖에 정보를 가지고 있는 td 태그가 있습니다. 

 

순위 정보를 가진 th 태그 안에 strong 태그가 있어, 한번 더 find를 하고, strong 태그 안의 정보를 가져옵니다. 

 

그리고 다른 정보들은 모두 td 태그 하위의 span 태그에 있음을 알 수 있습니다. 

그래서 tr 태그 아래의 모든 span 태그 정보를 가져옵니다. 

첫번째 span 태그로부터 구단 정보,

두번째 span 태그로부터 경기수,

세번째 span 태그로부터 승,

네번째 span 태그로부터 패,

다섯번째 span 태그로부터 무승부 정보를 가져옵니다. 

 

for tr_tag in soup.find(id='regularTeamRecordList_table').find_all('tr'):
    th_tag = tr_tag.find('th')
    strong_tag = th_tag.find('strong')
    lank = strong_tag.get_text()

    span_tag = tr_tag.findAll('span')
    team = span_tag[0].get_text()
    total = span_tag[1].get_text()
    win = span_tag[2].get_text()
    lose = span_tag[3].get_text()
    draw = span_tag[4].get_text()

그리고 가져온 정보를 출력하도록 하면 맨 위의 이미지와 같이 순위 정보를 표시할 수 있습니다. 

 

전체 코드

from bs4 import BeautifulSoup
import urllib.request as req

url = "https://sports.news.naver.com/kbaseball/record/index.nhn?category=kbo"
res = req.urlopen(url).read()
soup = BeautifulSoup(res, 'html.parser')

#print(soup) #파싱된 html 출력

for tr_tag in soup.find(id='regularTeamRecordList_table').find_all('tr'):
    th_tag = tr_tag.find('th')
    strong_tag = th_tag.find('strong')
    lank = strong_tag.get_text()

    span_tag = tr_tag.findAll('span')
    team = span_tag[0].get_text()
    total = span_tag[1].get_text()
    win = span_tag[2].get_text()
    lose = span_tag[3].get_text()
    draw = span_tag[4].get_text()

    print(lank, " ", team, " ", total, " ", win, " ", lose, " ", draw)
반응형
반응형

파이썬 웹 크롤링 / 네이버 첫화면 HTML 가져오기 
- beautifulsoup Parser와 비교

 

HTML 가져오기 위한 라이브러리, Beautifulsoup를 가져오기 위한 라이브러리

HTML을 가져오기 위한 라이브러리는 urllib 이며, request 모듈을 이용한다. urllib은 내장 라이브러리로 별도 설치할 필요가 없습니다.

 

HTML을 가져와서 보기는 어려워 Parser를 이용해 HTML을 쉽게 파악할 수 있도록 파싱합니다.

Parser에는 여러 종류가 있겠지만, 잘 알려진 bs4 라이브러리의 Beautifulsoup 모듈을 이용해 봅니다.

"pip install bs4" 명령어로 설치할 수 있고, Pycharm을 사용한다면 아래와 같은 방법으로 설치합니다.

 

File > Settings > Project Interpreter > [+] > bs4 설치

 

네이버 첫화면 HTML 가져오기를 위한 코드

 

request 모듈을 이용해 naver의 url의 html을 가져옵니다.

그리고 가져온 html을 보기 편하도록 BeautifulSoup 모듈로 파싱합니다.

from bs4 import BeautifulSoup
import urllib.request as req

url = "https://naver.com"
res = req.urlopen(url).read()
soup = BeautifulSoup(res, 'html.parser') 

print(res) #native html 출력
print(soup) #파싱된 html 출력

 

 

가져온 html과 파싱한 결과 비교

아래 결과를 보았을 때, html은 파싱하여 이용해야 하고, 다음엔 이 파싱된 부분을 가지고 이용하는 방법에 대해 다루어 보겠습니다. 

 

파싱되지 않은 html

파싱한 html

반응형

+ Recent posts