총정리


1일차

 

- urllib.request를 활용한 html 추출은 바이트로 들어오기 대문에 encoding 방식을 통해 알아내서 decoding 해주어야 한 다.

 

- re정규표현식을 통해 html 파싱을 해서 원하는 정보를 추출할 수 잇어야한다.

 

- Match객체 함수를 활용하여 re.compile에서 정규표현식을 매번 파싱하는게 번거로워서 미리 분석하여서

p.match와 같이 반복 횟수를 줄인다.

 

책제목 추출하는 예제 했음.


2일차

requests (써드모듈) 사용

 

lxml을 이용해서 HTML 스크레이핑을 하였음.

Xpath(XML path Language)

CSS(Cascading Style Sheets)

등을 활용하여 적절한 태그, 속성으로 접근하여 원하는 것만 추출한다.

BeautifulSoup

parsing(구문 분석): 이란? 구성 성분으로 분해 -> 관계 분석 -> 구조 결정

 

chrome 개발자 도구를 이용해서 element로 접근, 내가 원하는 정보를 분석 가능

 

예시, 시카고 맛집, 네이버 영화 평점 크롤링


3일차

RSS 스크레이핑 자주 변화하는 정보들을 쉽게 파악할 수 있도록 하는 콘텐츠 표현 방식

xml 기반 표준으로 사용된다.

feedparser라는 모듈을 활용하였다.

 

feed 속성을 가진 것과 entries 속성을 가진 것으로 나누어 진다.

feed.title, entries.title 등으로 접근 하여 사용할수 있었다.

 

 

데이터 베이스에 저장하기

sqlite3를 활용하여 데이터베이스를 조작하고, 테이블 생성, 삽입, 삭제, 업데이트 등의 sql을 사용해봄

파이썬에서 db연결 ( connect, cursor)

 

 

크롤러 만들기 순서

1. 웹페이지 추출 

request

2. lxml 파싱

 

3. 데이터베이스 저장

 

상세페이지에는 session을 활용하여 계속들어갈 수 이썽ㅅ음.


4일차

마지막으로 javascript로 작성되어진 웹페이지를 크롤링 하는 방법에 대해서 배움.(동적 웹페이지)

 

예시로 주유소 정보 가져오기, 샌드위치 집 시각화 하기 해봄

 

 

'Data Anaylsis > python basic' 카테고리의 다른 글

크롤링  (0) 2020.01.21
영화 평점 크롤링  (0) 2020.01.21
데이터베이스 기초  (0) 2020.01.21
rss 크롤링  (0) 2020.01.21
웹툰 크롤링  (1) 2020.01.21

크롤러 분류 기준

 

1. 상태를 가지고 있는지

2. 자바스크립트를 실행할 수 있는지

3. 불특정 다수의 사이트를 대상으로 하는지


상태를 가지는  크롤러(stateful)

상태를 가지지 않는 크롤러(stateless)


 

자바스크립트를 실행하는 크롤러를 만들려면 Selenium을 사용

Selenium은 프로그램에서 브라우저를 자동으로 조작할 수 있게 해줌

자바스크립트를 실행하는 크롤러는 HTML만 해석하는 크롤러에 비해 페이지 처리

시간이 오래 걸리며, 메모리도 많이 소비함.


불특정 다수의 웹사이트를 대상으로 하는 크롤러는 구글 검색엔진 이나 구글 봇, 

사용자가 입력한 url을 크롤링 하는 것.


** 크롤러 만들 때 주의할 점 **

크롤러를 만들 때는 저작권 침해, 크롤링 대상 웹사이트에 대한 피해 등을 고려해야 한다.

 

저작권이 있는 데이터를 무단으로 수집해서 활용하면 문제가됨.

크롤러를 매우 빠른 속도로 돌려 상대방 사이트에 너무 많은 부하를 주게 되면 문제가 될 수 있음.

 

robots.txt는 다음의 디렉티브를 사용해 크롤러에게 정보를 전달

 

디렉티브 설명
user-agent 디렉티브 정보의 대상이 되는 크롤러
disallow 크롤링을 거부할 경로
allow 크롤링을 허가할 경로
sitemap xml 사이트 맵의 url
crawl-delay 크롤러의 간격

 **예시**

user-agent : * 

- 모든 크롤러를 대상으로 한다.

user-agent : annoying-bot

- annoying-bot이라는 문자열을 포함한 크롤러를 대상으로 함

disallow:

- 모든 것을 크롤링해도 됨

Disallow: /tmp/

- /tmp/ 아래를 허가하지 않음

Allow : /articles/

- /articles/ 아래의 경로만 허가함

'Data Anaylsis > python basic' 카테고리의 다른 글

웹크롤링 간단 summary  (0) 2020.01.21
영화 평점 크롤링  (0) 2020.01.21
데이터베이스 기초  (0) 2020.01.21
rss 크롤링  (0) 2020.01.21
웹툰 크롤링  (1) 2020.01.21

requests, BeautifulSoup 모듈을 통해 네이버 평점 순위를 크롤링한다.

특정 날짜를 입력하면 그 날짜의 1위~41위(html상에 표기되어 있는 순위전체)

를 추출한 후, dataframe에 저장, csv로 최종 저장한다.

from bs4 import BeautifulSoup
import requests
import pandas as pd
url_base = 'https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=cur&tg=0&date='
url_sub = input('날짜를 입력하세요[ex) 20200112]')
url = url_base + url_sub
res = requests.get(url)
soup = BeautifulSoup(res.text, 'html.parser')


movie_title = []
star = []
list_movie = soup.find_all('div', 'tit5')
list_star = soup.find_all('td', 'point')

for item in list_movie:
    movie_title.append(item.find('a').get_text())

for item in list_star:
    star.append(item.get_text())


df1 = pd.DataFrame(data = {'영화제목': movie_title, '평점': star},
                   index = range(1,len(movie_title)+1))
df1.to_csv('aa.csv')

'Data Anaylsis > python basic' 카테고리의 다른 글

웹크롤링 간단 summary  (0) 2020.01.21
크롤링  (0) 2020.01.21
데이터베이스 기초  (0) 2020.01.21
rss 크롤링  (0) 2020.01.21
웹툰 크롤링  (1) 2020.01.21

데이터 : 하나의 단편적인 정보 의미

테이블 : 데이터가 표 형태로 표현된 것

데이터베이스 : 테이블이 저장되는 저장소

dbms : 데이터베이스 관리 시스템 또는 소프트웨어

열 : 각테이블은 1개 이상의 열로 구성

열 이름: 각열을 구분하는 이름

데이터 형식 :  열의 데이터 형식으로 테이블 생성할때 열이름과 함께 지정

행 : 실질적인 데이터

sql(구조화된 질의 언어) : 사용자와 dbms가 소통하는 말

 

con = sqlite3.connect('C:/Users/Admin/Downloads/sqlite-tools-win32-x86-3300100/sqlite-tools-win32-x86-3300100/testDB')
cur = con.cursor()
cur.execute('drop table if exists webtoon;')
cur.execute('create table webtoon(title text, author text, contents text, genre text, age text)')

connect 이후 

cursor을 생성해줘야 데이터베이스와 파이썬 사이의 '통로'가 생긴다.

cur.execute('insert into webtoon values(:title, :author, :contents, :genre, :age)',
               {'title':title, 'author':author,'contents':contents,'genre':genre,'age':age})
con.commit()
con.close()

commit을 해줘야 파이썬에서 데이터베이스로 정보가 넘어가고, 저장이 된다.

close를 꼭 해줘야된다. 

 

'Data Anaylsis > python basic' 카테고리의 다른 글

크롤링  (0) 2020.01.21
영화 평점 크롤링  (0) 2020.01.21
rss 크롤링  (0) 2020.01.21
웹툰 크롤링  (1) 2020.01.21
정규표현식  (0) 2020.01.09

Rss 스크래이핑

뉴스나 블로그 사이트에서 주로 사용하는 콘텐츠 표현 방식

업데이트 된 정보를 쉽게 사용자에게 제공하는 데이터 형식

xml은 rss형식으로 제공된다.

html보다 간단하게 파싱할 수 있음.

 

http://www.aladin.co.kr/rss/new_all/351

 

 

 

피드 정보를 담은 feed 속성과 개별적인 항목을 담은 entries 속성을 가짐.

url = 'http://www.aladin.co.kr/rss/new_all/351'
d = feedparser.parse(url)
for i in range(len(d.entries)):
    print('제목:',d.entries[i].title)
    print('링크:',d.entries[i].link)

알라딘 서점의 제목, 링크 추출하기

'Data Anaylsis > python basic' 카테고리의 다른 글

영화 평점 크롤링  (0) 2020.01.21
데이터베이스 기초  (0) 2020.01.21
웹툰 크롤링  (1) 2020.01.21
정규표현식  (0) 2020.01.09
클래스  (0) 2020.01.06

+ Recent posts