2회독 - 3주차 웹스크래팅 & 크롤링 ( requests, bs4 )

2022. 12. 6. 22:27웹개발 메모장

728x90
SMALL

3-6강 패키지 사용해 보기  (requests)

import requests # requests 라이브러리 설치 필요

r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()

라이브러리마다 정리된 방식이 다르기때문에

검색하거나 그 사이트 가서 방식을 알아보고 적용해야 한다.

 

위 라이브러리는 requests 라이브러리이다.

 

 


 

3-7강 웹스크래핑 웹크롤링 해보기

 

 

크롤링, 파싱, 스크래핑

 

크롤링 -  웹 인덱싱을 위해 WWW를 체계적으로 탐색해나가는 것을 의미

 

파싱 - 웹 파싱은 웹 상의 자연어, 컴퓨터 언어 등의 일련의 문자열들을 분석하는 프로세스

어떤 데이터에서 내가 원하는 데이터만 추출해서 불러올 수 있게 하는것.

 

스크래핑 - 웹 스크래핑은 다양한 웹사이트로부터 데이터를 추출하는 기술을 의미

 

 


파이썬에서 가장 많이 사용되고 있는 패키지 request, beautifulsoup

 

Requests: HTTP 요청을 보낼 수 있도록 기능을 제공하는 라이브러리 입니다.

BeautifulSoup: 웹 페이지의 정보를 쉽게 스크랩할 수 있도록 기능을 제공하는 라이브러리입니다.

 

 


크롤링 기본 세팅

import requests
from bs4 import BeautifulSoup

headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get('url',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

# 코딩 시작

print(soup)

 

 

bs4 사용하는 방법

 

분석할 데이터에서 오른쪽 클릭 - 검사 

엘리먼츠에서 파란네모 - copy - copy selector 클릭

 

저희 경우 영화랭킹 1위인 올빼미 - 우클릭 - 검사 - elements에서 파란네모 - copy - copy selector

 

파이썬파일에서 data의 url칸을 분석할 웹페이지링크 넣고

bs4를 이용하여 분석해본다.

 

print(title.text)

----> 올빼미


print(title['href'])


----> /movie/bi/mi/basic.naver?code=222301

.text를 하면 위 태그에서 올빼미만 나온다.

['href']를 하면 a href = 의 내용이 나온다.

 


영화랭킹 페이지에서 영화 순위 / 제목 / 평점을 추출하려고 한다.

위 노란박스의 회색 글씨는 위 방법으로 뽑아온 태그이다.

 

거기서 movies 를 파란박스로 정의하고

for문을 쓴다. 그리고 a를 movie에서 분홍박스로 정의하면 해당 웹 페이지에 나와있는 랭킹 순위안에 들어간 영화제목이 다 나온다.

 

영화 제목만 추출되면 좋으나 None 이라는 것까지 나오는데 여기서 None은 영화 랭킹화면에서 중간에 나오는  밑줄이 있는데 그것 때문에

None으로 표시 된거 같다. 

영화 제목이 만들어진 코드와 동일하게 <tr></tr>로 되어있어서 표시되는건데

이 None을 빼고 만들려면  아래 코드를 적용시키면 된다.

 

 

*

for a == 0    ▶️ a는 0이다

for a != 0     ▶️ a는 0이 아니다 

같은 뜻으로 

if a is not None: 

을 쓸 수 있다.

 

위 코드로 작업하면 영화제목이 나열되는걸 볼 수 있다.

 

이처럼 순위 / 제목 / 평점을 뽑아보면

이렇게 하면 된다.

순위의 경우 

<img src="https://ssl.pstatic.net/imgmovie/2007/img/common/bullet_r_r02.gif" alt="02" width="14" height="13">

코드가 이렇게 되어있어서 여기서 alt만 뽑아줘야 하기때문에 rank = 코드 마지막에 ['alt']을 넣어줬다.

 

 


에러난 부분

 

 

영화제목만 뽑았을때는 잘 됐다고 생각했는데

순위(rank) 작업을 하면서 에러가 생겨났다.

 

그 이유는 코드 맨 위 데이터 url 입력시 잘못된 url을 입력하였기때문이다.

그래서 옳바른 url을 입력하고 나서 정상작동했다!

 

 

 

 

728x90
LIST