Python
파이썬 크롤링과 시각화 기본다지기(4)
J개발자
2021. 9. 23. 19:01
웹 크롤링
이번 장에서는 웹 크롤링을 기술한다.
크롤링이란 코랩에서 코딩으로 요청 응답을 받는 것이다. 완성된 웹페이지 내에서 필요한 정보를 수집, 추출하는 과정이다. 웹 스크래핑이라고도 한다.
사용자가 서버에 요청/응답 신호를 보내는 것과 같은 원리이다.
웹 크롤링에 필요한 모듈은 크게 표준 모듈과 외부 모듈로 나뉜다.
표준 모듈은 urllib가 있으며 표준이라 직관적이지 않아 보통 외부 모듈 사용을 선호한다.
외부 모듈은 requests가 있으며 설치방법은 cmd 창에 들어가 설치하는 방법으로 같다.(물론 코랩은 이미 설치가 되어있어 cmd창에 직접 설치할 필요 없다.)
웹 크롤링에 앞서...
HTML(Hyper Text Markup Language): 웹페이지를 만드는 문법을 갖춘 언어
HTML 태그: 역할이 정해진 태그를 통해서 사용자가 보는 화면에 알맞춰 보여준다
위의 구조를 웹페이지에서 확인하며 숙지할 필요가 있다.
#requests모듈
import requests
r = requests.get('https://www.naver.com/')
print(r.text) #text는 html소스를 가지고 오는 것(코드,텍스트 그자체)
- requests를 통해 데이터 긁어오기
#requests를 통해 검색된 결과 가져오기(파라미터 값을 직접 넘겨주기) import requests url='https://search.naver.com/search.naver' parmas = {'query':'파이썬'} #query는 네이버에서 정한 값 #파라미터 값을 넘겨주고 싶을때 params사용 / 없으면 그냥 url넘겨주면 된다. r = requests.get(url,params = params) #매개변수에 딕셔너리{'파라미터명':'넘겨줄 값'} print(r.text)
- 네이버 영화 기생충 가져오기
import requests
url = 'https://movie.naver.com/movie/bi/mi/basic.naver?'
params = {'code':'161967'}
r = requests.get(url,params = params)
content=r.text
#type(content) --> str
content = content[content.index('<a href="./basic.naver?code=161967">')+len('<a href="./basic.naver?code=161967">'):]
title = content[:content.index('</a>')]
print('영화제목: ',title)
- 위 코드 보충 학습
#index('값')은 문자열에서 해당 값의 인덱스 번호를 리턴한다. #값이 중복될 경우(여러개일 경우) 맨 앞에 있는 인덱스 번호를 리턴한다. content1 = 'hello everyone nice to meet you' content1[content1.index('everyone')+len('eveyone'):]
- 태그 찾는 것을 도와주는 외부모듈 BeautifulSoup4
import requests from bs4 import BeautifulSoup url = 'https://movie.naver.com/movie/bi/mi/basic.naver?' params = {'code':'161967'} r = requests.get(url,params=params) html1=r.text #BeautiffulSoup타입의 객체를 생성 soup = BeautifulSoup(html1,'html.parser') #a = soup.find('li') #soup.find('태그이름') -->해당 태그이름의 html코드 리턴한다. 해당 이름의 태그가 여러개 있을 경우 첫번째 태그만 가져오는 메소드. #soup.find_all('태그이름') res = soup.find_all('h3',class_='h_movie') print(res.text) """결과:기생충 PARASITE , 2019""" print(res.find('a').text) #결과:기생충 print(res.find_all('a').get('href')) #결과: ./basic.naver?code=161967
- 영화 순위 가져오기
1~50
import requests
from bs4 import BeautifulSoup
url = 'https://movie.naver.com/movie/sdb/rank/rmovie.naver'
r = requests.get(url
html1= r.text
soup = BeautifulSoup(html, 'html.parser')
title = soup.find_all('div',class_='tit3')
#해당 태그 내용만 나오게
#방법1
for i in range(len(title)):
print(i+1,'위: ',title[i].text.replace('\n','')
#방법2
"""
rank =0
for line in title:
rank+=1
print(rank,'위: ',title[i].text.replace('\n','')
title[0].text.strip()
"""
- 순위 자체도 크롤링하기
import requests
from bs4 import BeautifulSoup
url = 'https://movie.naver.com/movie/sdb/rank/rmovie.naver'
r = requests.get(url)
html=r.text
soup = BeautifulSoup(html, ''html.parser')
title = soup.find_all('div',class_ = 'tit3')
rank = soup.find_all('td',class_ = 'ac')
#rank[0].find('img').get('alt')
res=[]
for line in rank:
if line.find('img') ==None:
res.append(None)
else:
res.append(line.find('img').get('alt'))
print(res)
순위 이미지만 가져오길 원하지만 붉은 표시된 이미지도 있어 같이 가져오게 된다.
다음5장에는 이 문제를 해결하는 코드내용을 리뷰할 것이다.
- 기본적이 HTML구조 파악하기