티스토리 뷰

2. 3주차 오늘 배울 것

파이썬으로 웹에 있는 데이터를 긁어올수 있는 크롤링

그것을 저장할수 있도록 mongodb를 활용

 

03. 연습 겸 복습 - 나홀로메모장에 OpenAPI 붙여보기

article 라는 키안에 리스트가 들어있다.

나홀로메모장 API(GET)

<script>
    $(document).ready(function () {
        $('#cards-box').empty('');
        listing();
    });

    function listing() {
        $.ajax({
              type: "GET",
              url: "http://spartacodingclub.shop/post",
              data: {},
              success: function (response) {
                  let articles = response['articles'];
                  for (let i = 0; i < articles.length; i++) {
                      let article = articles[i];
                      let image = article["image"];
                      let url = article["url"];
                      let title = article["title"];
                      let desc = article["desc"];
                      let comment = article["comment"];
                      let temp_html = `<div class="card">
                                         <img class="card-img-top" src="${image}" alt="Card image cap">
                                         <div class="card-body">
                                           <a href="${url}" target="_blank" class="card-title">${title}</a>
                                           <p class="card-text">${desc}</p>
                                           <p class="card-text comment">${comment}</p>
                                         </div>
                                       </div>`;
                      $('#cards-box').append(temp_html);
                  }
              }
            })
    }

    function openclose() {
        // id 값 post-box의 display 값이 block 이면
        if ($('#post-box').css('display') == 'block') {
            // post-box를 가리고
            $('#post-box').hide();
            $('#btn-posting-box').text('포스팅 박스 열기');
        } else {
            // 아니면 post-box를 펴라
            $('#post-box').show();
            $('#btn-posting-box').text('포스팅 박스 닫기');
        }
    }
</script>

저번시간에 했던 거랑 비슷하다.

 

05. 파이썬 기초공부

문법을 다 알 필요가 없고 구글링하는 습관을 기르자 

 

파이썬 기초 문법

변수 & 기본연산

기본 연산

TypeError: can only concatenate str (not "int") to str

인터넷에 구글링 해본다.

원인은 문자하고 숫자를 더하면 에러가난다.

문자열 '2' , str(2)를 고쳐주면 된다.

 

함수

리스트

[ ] ,추가

딕셔너리

{ }                                                                                                       추가

조건문

기본 조건문, 함수 호출한 조건문

반복문

반복문

대괄호 중괄호 언제 쓰나?

person의 age값을 가져올때는 [ ]를 쓰는구나 이런식으로 이해해야한다.

대괄호는 이럴때 쓰는 거구나 거꾸로 이해하면 아된다.

 

06. 파이썬 패키지 설치하기

패키지? 라이브러리? → Python 에서 패키지는 모듈(일종의 기능들 묶음)을 모아 놓은 단위이다. 이런 패키지 의 묶음을 라이브러리 라고 볼 수 있다. 지금 여기서는 외부 라이브러리를 사용하기 위해서 패키지를 설치한다.

 

가상환경 ?

프로젝트별로 패키들을 담을 공구함

라이브러리를 담아두는 폴더라고 생각

 

pip(python install package) 사용 - requests 패키지 설치해보기

project interpreter 화면에서 +를 누르고 requests 친 뒤 install package를 누른다.

 

07. 패키지 사용해보기

패키징 어떻게 쓰는지 구글링해보기

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

r = requests.get('http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99')
rjson = r.json()

print(rjson['RealtimeCityAir']['row'][0]['NO2'])

openapi
Ajax와 유사한 결과가 나온다.

내용은 requests만든 사람이 이렇게 해놨구나 나도 이에 맞게 써야된다고 생각한다.

 

결과 값 중구
for문을 이용하여 출력

08. 웹스크래핑(크롤링) 기초

크롤링이란?

구글의 검색 엔진이나 네이버의 검색 엔진이 내 사이트를 퍼가는 행위

 

크롤링이 가능한 이유?

이미 받아온것을 가지고 내가 쏚아내는것

 

크롤링할때 중요한기술적인 2가지

1. 브라우저에서 켜지 않고 코드단에서 요청(requests)하는것

2. 요청돼서 가지고 온 hrml들 중에 내가 원하는 정보를 잘 솎아내는 것(beautifulsoup)

 

기본 코드를 놓고 시작

import requests
from bs4 import BeautifulSoup

# 타겟 URL을 읽어서 HTML를 받아오고,
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('https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&date=20200303',headers=headers)

# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
# soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨
# 이제 코딩을 통해 필요한 부분을 추출하면 된다.
soup = BeautifulSoup(data.text, 'html.parser')

#############################
# (입맛에 맞게 코딩)
#############################

print(soup)

htmp이 그대로 나옴

headers

코드 단에서 요청했을 때 기본적인 요청은 막아둔 사이트들이 많다.

브라우저에서 enter치는거 마냥 효과를 준다.

 

url이 들어오고 data로 요청을 받아오면 그거를 가지고 솎아내기 좋은 beautifulsoup형태로 만들어서 찍어준다.

 

사용방법

select one(한개) 과 select(여러개)

 

select one 

네이버 영화 사이트에서 그린북 검사를 눌러 select 복사를 한다.

selector? 선택자 어디에있는지 정확하게 알려줌

 

 

태그의 텍스트 .txt
태그의 속성 ['href']

select 

html 구조를 보면서 한다.

네이버 영화 사이트에서 그린북 검사를 눌러 <tr>...</tr> select 복사를 한다.

서로 다른 부분을 삭제

select는 결과가 리스트로 나온다.

 

td.title>div>a는 그린북 정보
none의 error

none은 사이트에 있는 줄이다.

줄 안에서 그린북을 가져올라면 error가 난다.

NoneType이 없다 =>None에다가 .text하지말라는 뜻 

 

None은 사라지고 영화 제목만 나온다.

9강 웹스크래핑 더 해보기 (순위, 제목, 별점)

import requests
from bs4 import BeautifulSoup

# URL을 읽어서 HTML를 받아오고,
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('https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&date=20200303',headers=headers)

# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
soup = BeautifulSoup(data.text, 'html.parser')

# select를 이용해서, tr들을 불러오기
movies = soup.select('#old_content > table > tbody > tr')

# movies (tr들) 의 반복문을 돌리기
for movie in movies:
    # movie 안에 a 가 있으면,
    a_tag = movie.select_one('td.title > div > a')
    if a_tag is not None:
        rank = movie.select_one('td:nth-child(1) > img')['alt'] # img 태그의 alt 속성값을 가져오기
        title = a_tag.text                                      # a 태그 사이의 텍스트를 가져오기
        star = movie.select_one('td.point').text                # td 태그 사이의 텍스트를 가져오기
        print(rank,title,star)

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함