728x90
반응형
python으로는 웹 크롤링이 좀 더 쉽다고 들었는데, 수업에서 직접해보니 자바에서 할때보다 코드 수도 훨씩 적고 쉬웠다.
python에서 파싱을 하기 위해서는 request, beautifulSoup을 다운받아야 한다.
일단 간단하게 먼저 xml 파싱을 해봤다.
#-*- coding:utf-8 -*-
import urllib.request as req
from bs4 import BeautifulSoup
from urllib import parse
fd=input("검색어 입력:")
fd=parse.quote(fd) #인코딩
print(fd)
url=f"http://newssearch.naver.com/search.naver?where=rss&query={fd}"
res=req.urlopen(url)
soup=BeautifulSoup(res,'html.parser')
#print(soup)
data=soup.find_all("item")
for item in data:
#print(item)
title=item.find("title").string
#print(title)
desc=item.find("description").string
author=item.find("author").string
#pubDate=item.find("pubDate").string
link=item.find("link").string
category=item.find("category").string
print(title)
print(desc)
#print(pubDate)
print(link)
print(category)
print("===================")
태그를 읽어서 그 안의 내용들을 각각의 변수에 담아준다. find메소드와 .string을 이용하면 찾아올 수 있다.
selnum=int(input("1.박스오피스, 2.실시간 예매율, 3.좌석 점유율, 4.온라인 상영관:"))
url=''
if selnum==1:
print("박스오피스")
url="https://www.kobis.or.kr/kobis/business/main/searchMainDailyBoxOffice.do"
elif selnum==2:
print("실시간 예매율")
url="https://www.kobis.or.kr/kobis/business/main/searchMainRealTicket.do"
elif selnum==3:
print("좌석 점유율")
url="https://www.kobis.or.kr/kobis/business/main/searchMainDailySeatTicket.do"
elif selnum==4:
print("온라인 상영관")
url="https://www.kobis.or.kr/kobis/business/main/searchMainOnlineDailyBoxOffice.do"
#url="https://www.kobis.or.kr/kobis/business/main/searchMainDailyBoxOffice.do"
web_data=req.urlopen(url).read().decode('utf-8')
#print(web_data)
json_data=json.loads(web_data)
#print(json_data)
for movie in json_data:
print("영화명:"+movie['movieNm'])
print("감독:"+movie['director'])
print("장르:"+movie['genre'])
print("등급:"+movie['watchGradeNm'])
print("상영시간:"+movie['showTm'])
print("==================")
json 파싱
url을 다르게 해서 내용을 긁어오고 있다. json은 태그가 아닌 key를 주고 value를 읽어오는 방식을 사용하고 있다.
import urllib.request as req
from bs4 import BeautifulSoup
import requests
'''
<td class="title">
<div class="tit3">
<a href="/movie/bi/mi/basic.nhn?code=189150" title="분노의 질주: 더 얼티메이트">분노의 질주: 더 얼티메이트</a>
</div>
</td>
'''
url="https://movie.naver.com/movie/sdb/rank/rmovie.nhn"
movie_data=requests.get(url)
movie_data=movie_data.text
#print(movie_data)
soup=BeautifulSoup(movie_data,'html.parser')
mList=soup.select(".title > .tit3 > a")
for movie_title in mList:
print(movie_title.attrs['href'])
print(movie_title.text)
html 파싱
역시 어렵지 않게 태그를 사용해서 값을 읽어오고 있다.
import urllib.request as req
from bs4 import BeautifulSoup
import json
class MovieSystem:
def movie_list(self):
#웹서버 연결
page=int(input("페이지 입력:"))
url=f"http://192.168.0.7/web/movie/list.do?page={page}"
web_data=req.urlopen(url).read().decode('utf-8')
print(web_data)
json_data=json.loads(web_data)
print(json_data)
for movie in json_data:
print("========================")
print("영화제목:"+movie['title'])
print("상영일:"+movie['regdate'])
print("장르:"+movie['genre'])
print("등급:"+movie['grade'])
print("제작:"+movie['nation'])
print("상영시간:"+movie['time'])
print("순위:"+str(movie['mno']))
def movie_detail(self,mno):
url="http://192.168.0.7/web/movie/detail.do?mno="+str(mno)
web_data=req.urlopen(url).read().decode('utf-8')
print(web_data)
movie=json.loads(web_data)
print(movie)
print("========================")
print("영화제목:"+movie['title'])
print("상영일:"+movie['regdate'])
print("장르:"+movie['genre'])
print("등급:"+movie['grade'])
print("제작:"+movie['nation'])
print("상영시간:"+movie['time'])
print("순위:"+str(movie['mno']))
print("박스오피스:"+movie['boxoffice'])
print("누적관객:"+movie['showUser'])
print("평점:"+str(movie['score']))
print("줄거리:"+movie['story'])
#mno=int(input("상세볼 영화 번호:"))
#movie_detail(mno)
movie=MovieSystem()
mno=int(input("상세볼 영화 번호:"))
movie.movie_detail(mno)
json 파싱 함수를 클래스로 묶어서 메소드화 시켰다. 페이지별로, 영화넘버별로 상세정보까지 볼 수 있게 만들었다.
그리고 개인프로젝트는 다음주부터 장고를 활용해서 진행하게 됐다. 주제는 이미 정했고, 데이터 수집까지 마쳐놨다. 이제까지 계속 협업으로 팀 프로젝트만 하다가 처음으로 개인 프로젝트를 하게되어 떨리면서 기대가 된다.
728x90
반응형
'programming > Gukbi' 카테고리의 다른 글
국비 교육 102일차 - django 프로젝트(리스트 출력, 페이지 나누기) (0) | 2021.05.25 |
---|---|
국비 교육 101일차 - Django ORM 프로그램 (0) | 2021.05.25 |
국비 교육 99일차 - python class, 상속, 파일 입출력 (0) | 2021.05.20 |
국비 교육 98일차 - python db연결, 함수화 (0) | 2021.05.20 |
국비 교육 97일차 - python (0) | 2021.05.18 |