※ 학습 노트

학습 날짜

 2020년 1월  

학습 사이트 

 인프런

과정 제목

 파이썬입문과 크롤링기초 부트캠프 (2020 업데이트) [쉽게! 견고한 자료까지!] 

학습 시간

 72강/941분

의견

 - 크롤링이 뜻대로 되지 않는 부분에 대한 팁을 얻기 위해 등록한 과정이기 때문에 

   스파르타 코딩 클럽에서 배운 것과 겹치는 부분은 스킵하고 필요한 부분부터 우선적으로 듣기로 함

 - 개념적인 것을 엄청 자세하게 설명해서 초보자(나)에게 좋음. 기존에 배운 것 복습 + 빈 곳을 채우는 느낌

 - 10~20분 단위로 micro하게 구성

 학습 모듈

 크롤링과 웹 기본 - 실전부분 




크롤링과 웹 기본__패턴으로 실습하며 익히기: HTML/CSS 이해를 바탕으로 크롤링하기

* 크롤링 패턴 코드

import requests
from bs4 import BeautifulSoup

res = requests.get('https://news.v.daum.net/v/20170615203441266')
soup = BeautifulSoup(res.content, 'html.parser')

mydata = soup.find_all('span','txt_info')
for item in mydata:
print (item.get_text())


*meta tag는 검색 엔진에 해당 페이지를 잘 검색할 수 있도록 쓰이는 경우가 많음

*해당 tag가 html 내에서 여러 군데 사용되고 있는 경우 class를 활용

*크롤링을 하고 싶은 부분이 class를 여러 개 사용 있는 경우,  class를 띄어쓰기 포함 그대로 사용

*mydata.get_text 또는 mydata.string 사용



크롤링과 웹 기본__패턴으로 실습하며 익히기: 실전 크롤링과 강력한 크롤링 기술 팁 

* 오픈 크롬 개발자 모드를 오픈 

   : 윈도우 Ctrl + Shift + i 또는 F12

* 원하는 영역 오른쪽 클릭한 후 copy > Copy outer html 복사 가능

* find()로 더 크게 감싸는 html 태그로 추출 후, 추출된 데이터에서 find_all()로 원하는 부분을 추출

* 문자 전처리할 때: strip(), split() 함수 사용

* 리스트에 숫자 붙일 때

for index, title in enumerate(titles):
print(str(index+1)+'.', title.get_text().split()[0].string())



크롤링과 웹 기본__CSS selector 사용해서 크롤링하기

* select()안에 태그 또는 CSS class 이름 등을 넣으면 결과값은 리스트 형태로 반환됨

* 하위 태그는 스페이스로 구분

* 모든 단계의 태그를 다 적을 필요는 없지만, 바로 밑의 태그에 해당하는 부분을 추출하고 싶을 때는 ul > a  식으로 > 사용

* class 이름을 사용하고 싶을 때에는 .사용, class 여러 개일때도 .사용하여 이어줌  

  id 는 # 사용 

* find()/select()로 가져온 객체는 find()/select() 모두 교차 사용 가능



바로 실전 크롤링해보기: 네이버 쇼핑 사이트 크롤링하기

#네이버쇼핑 best100 인기검색어

import requests
from bs4 import BeautifulSoup

res = requests.get('https://search.shopping.naver.com/best100v2/main.nhn')
soup = BeautifulSoup(res.content, 'html.parser')

items = soup.select('#popular_srch_lst > li > span.txt > a')
for item in items:
print(item.get_text())


#네이버쇼핑 특정 카테고리 상품 제목 

import requests
from bs4 import BeautifulSoup

res = requests.get('https://search.shopping.naver.com/search/all?frm=NVBT100&origQuery=%EB%8B%A4%EC%9D%B4%EC%96%B4%EB%A6%AC&pagingIndex=2&pagingSize=40&productSet
=total&query=%EB%8B%A4%EC%9D%B4%EC%96%B4%EB%A6%AC&sort=rel&timestamp=&viewType=thumb')
soup = BeautifulSoup(res.content, 'html.parser')

items = soup.select('div.imgList_title__3yJlT > a')

for item in items: print(item.get_text()) 


#네이버증권 인기검색종목

import requests
from bs4 import BeautifulSoup

res = requests.get('https://finance.naver.com/sise/')
soup = BeautifulSoup(res.content, 'html.parser')

items = soup.select('#popularItemList > li > a')
for item in items:
print(item.get_text())



또다른 크롤링 기술, urllib 라이브러리 사용법 이해

* 기존에는 urllib+bs4 세트로 많이 사용하였는데, 최근에는 requests + bs4 세트를 많이 사용

  기존 코드 중 일부가 urllib 사용하는 경우가 있으며 인코딩 처리가 다름

* requests 라이버리를 사용해서 크롤링 진행하고, 문제가 있는 경우만 urllib 시도

from urllib.request import urlopen #urllib request class에 들어있는 urlopen 함수만 필요
from bs4 import BeautifulSoup

res = urlopen('https://davelee-fun.github.io/')
soup = BeautifulSoup(res, 'html.parser')

items = soup.select('h4.card-text')
for item in items:
print(item.get_text().strip())



여러 페이지 한번에 크롤링하는 기법

* 주소에있는 페이지 번호를 활용하여 for 구문 사용

import requests
from bs4 import BeautifulSoup

for page_num in range(10):
if page_num == 0:
res = requests.get('https://davelee-fun.github.io/')
else:
res = requests.get('https://davelee-fun.github.io/page' + str(page_num + 1))
soup = BeautifulSoup(res.content, 'html.parser')

data = soup.select('h4.card-text')
for item in data:
print(item.get_text().strip())



크롤링해서 엑셀 파일로 데이터 저장하기

* openpyxl 라이브러리 활용

* 함수 설정

import openpyxl

def write_excel_template(filename,sheetname,listdata):
excel_file = openpyxl.Workbook() #엑셀 파일 오픈
excel_sheet = excel_file.active #엑셀 시트 선택

if sheetname !='': #시트이름이 없으면 넘어가기
excel_sheet.tile = sheetname

for item in listdata:
excel_sheet.append(item)
excel_file.save(filename)
excel_file.close()


* 크롤링해서 저장하기

import requests
from bs4 import BeautifulSoup

product_lists = list()

for page_num in range(10):
if page_num == 0:
res = requests.get('https://davelee-fun.github.io/')
else:
res = requests.get('https://davelee-fun.github.io/page'+str(page_num+1))
soup = BeautifulSoup(res.content,'html.parser')

data=soup.select('div.card')
for item in data:
product_name = item.select_one('div.card-body h4.card-text')
product_date = item.select_one('div.wrapfooter span.post-date')
product_info = [product_name.get_text().strip(),product_date.get_text()]
product_lists.append(product_info)

write_excel_template('tmp.xlsx','상품정보',product_lists)


* 엑셀파일 불러오기

for item in excel_sheet.rows:
print (item[0].value, item[1].value) #셀에 들어있는 값을 가져오기 위해 .value를 붙여줌


excel_file.close()




반응형


※ 학습 노트

학습 사이트 

 인프런

과정 제목

 파이썬입문과 크롤링기초 부트캠프 (2020 업데이트) [쉽게! 견고한 자료까지!] 

학습 시간

 72강/941분

의견

 - 크롤링이 뜻대로 되지 않는 부분에 대한 팁을 얻기 위해 등록한 과정이기 때문에 

   스파르타 코딩 클럽에서 배운 것과 겹치는 부분은 스킵하고 필요한 부분부터 우선적으로 듣기로 함

 - 개념적인 것을 엄청 자세하게 설명해서 초보자(나)에게 좋음. 기존에 배운 것 복습 + 빈 곳을 채우는 느낌

 - 10~20분 단위로 micro하게 구성

 학습 모듈

 강의 준비

 파이썬과 프로그래밍 기초를 견고하게 쌓는 가장 좋은 방법 - skip

 파이썬 객체와 라이브러리 - skip

 크롤링과 웹 기본 



강의준비_데이터과학과 IT 영역에서의 파이썬과 크롤링 큰그림 이해하기

* 영역: 웹, 앱, 응용 프로그램, IoT, 인공지능

* 단계: 데이터 수집 - 저장 - 분석 - Visualization - 서비스 개발



강의준비_프로그래밍 언어 기초와 파이썬 이해

* 프로그래밍 언어: 인간이 컴퓨터와 소통할 수 있도록 컴퓨터가 이해할 수 있는 명령으로 프로그램을 작성할 수 있도록 만든 언어

  - 컴퓨터는 기계어 (0과 1로 된 이진수 형태로 CPU가 이해할 수 있는 코드)만 이해한다



강의준비_anaconda와 jupyter notebook 소개와 설치

* 아나콘다(anaconda) 확장 기능 + 컴파일러 프로그램까지 한 번에 설치할 수 있는 프로그램

  - 파이썬 기본(컴파일러), 주요라이버리, 주요툴(jupyter notebook포함)을 모아놓은 패키지

  - 컴파일러 고급 언어로 작성된 코드를 기계어로 변환하는 프로그램



크롤링과 웹 기본_패턴으로 실습하며 익히기: 크롤링 코드 패턴으로 이해하기

  #라이브러리 임포트

 import requests

 from bs4 import BeautifulSoup

 #웹페이지 가져오기

 res = requests.get('사이트주소')

 #웹페이지 파싱하기

 soup = BeautifulSoup(res.content, 'html.parser')

 #필요한 데이터 추출하기 

 mydata = soup.find('title')

 #추출데이터 활용하기

 print(mydata.get_text()) 


* 웹기본구조

- 네트워크를 통해 내 컴퓨터와 다른 컴퓨터를 연결하고 정보를 주고 받을 수 있음

- 어떤 컴퓨터에서 정보를 받아올지 지칭하는 주소가 IP주소

- IP 주소를 이름으로 표기한 것이 웹주소 

- 주소를 넣으면 html로 구성된 파일을 달라고 요청하고 html은 해당 정보를 웹브라우저 안에서 보여줌


* 파싱 문자열의 의미를 분석하는 것


* 데이터 추출

soup.find('html코드')

변수.get_text




HTML


크롤링과 웹 기본_크롤링을 위한 지식: 웹구조와 HTML 이해하기

* 웹페이지는 HTML, CSS, javascript로 표현

* HTML

   - HTML은 마크업 언어: 문서나 데이터의 구조를 표현하는 언어

   - HTML 언어 : 웹페이지를 만드는 언어

   - 꺽쇠 <>와 tab로 표현

* Sublime Text 3 프로그램: HTML 에디터


*HTML 기본구조

<!DOCTYPE html> 이 문서는 HTML 언어를 사용

 <html> 여기서부터 HTML 문서 시작

 <head> 문서 전체 정보 (제목 등)

 </head>

 <body> 실제 웹페이지 표현되는 내용

 </b> enter

 </body> 

 </html>


  <head>

 <title> 제목 </title> 웹페이지의 타이틀이라 본문에 표시되지 않지만 탭에서 확인 가능

 <meta charset="utf-8"> 글씨가 깨질 때 추가 

 </head>


*태그 속성

<태그 속성(속성 이름, 속성 값) 속성 속성>

- 속성과 속성 사이는 한 칸씩 띄어야함


*구조화된 태그 (테이블)

  <table border="1">

   <thead> 한 테이블의 타이틀(표 머리글)

      <tr>

          <th>1*1</th>

      <tr>

   </thead>

   <tbody> 본문 내용

      <tr>

          <td>1*1</td> 

      <tr>

  </tbody> 

 </table>



크롤링과 웹 기본_패턴으로 실습하며 익히기: HTML 이해를 바탕으로 크롤링하기

*속성을 가져오는 방법

soup.find('태그')

 

#예시

 data =soup.find('p', class_='cssstyle') #클래스가 cssstyle을 가져오는 것

 data =soup.find('p', attrs={class':'cssstyle') #속성과 속성값을 그대로 기입 / 속성 여러 개 나열 가능

 data =soup.find('p', 'cssstyle')

 data =soup.find('p', id='body') 


 datas =soup.find_all #전체 다 찾아주나 리스트 형태로 보여주기 때문에 for 구문써줘야함

 for find_data in find_datas:

      print (find_data.get_text())


* 크롤링에서 가장 많이 쓰는 속성은 class이고 css 언어와 관련


CSS


크롤링과 웹 기본_크롤링을 위한 지식: 웹구조와 CSS  이해하기

* HTML로 웹페이지 구조(내용)을 표현하고 CSS언어를 활용하여 디자인하는 것이 일반적

* CSS 언어 적용 방법 

  1) 적용할 태그에 style 속성으로 넣기

  2) HTML문서 <head>안에 <style>태그로 넣기

  3) HTML문서 <head>안에 CSS파일 링크하기

* css언어는 프로퍼티와 프로퍼티 값으로 이루어짐. 

* 프로퍼티 정의는 구글 검색하여 css tutorial 활용


* 적용 방법 별 예시

  1) 적용할 태그에 style 속성으로 넣기

<td style ="text-align:center; color:blue">

세미콜론으로 구분해서 프로퍼티와 값을 연속으로 사용 가능. 띄어쓰기 해도 되고 안해도 됨


  2) HTML문서 <head>안에 <style>태그로 넣기

<style type="text/css">

td{

    font-size: 2em; 화면에서 디폴트로 보여주는 폰트의 2배

    font-family: Gulim;

    text-align: center;

}

</style>


 3) HTML문서 <head>안에 CSS파일 링크하기  매 페이지마다 head를 쓸 필요 없이 css 파일을 만들어놓고 페이지에 링크 가능

통상 css라는 확장자를 사용하여 파일 저장

#특정 태그에 css 설정 적용할 때

<link rel="stylesheet" type="text/css" href="css/style.css"> css파일이 들어있는 폴더와 파일명 


#.이름을 써서 별도의 css를 설정하여 내가 원하는 곳에 적용하려고 할 때

#.highlight는 내가 설정한 이름이며, class라고 부름 

.highlight {

 font-size:3em; 

 text-align:right;

 color: blue;

 }


<td class="highlight"> #설정한 css를 사용하고 싶은 곳의 태그 안에 class로 표시

<td class=highlight> 


반응형

+ Recent posts