Studio KimHippo :D
#4. Kim_crawl_MK.1.1 (김_크롤_1.1호) 본문
필요 패키지
from bs4 import BeautifulSoup as bs
from pprint import pprint
import requests as req
from time import sleep
import winsound as ws
import os
클래스 부분
class advanced_kim_crawl:
def __init__(self, in_url):
self.url = in_url
def get_parser(self):
html = req.get(self.url)
self.soup = bs(html.content, 'lxml')
return self.soup
def get_obj(self, selector, number_of_data):
soup = self.get_parser()
if (number_of_data == 'some') or (number_of_data == 'Some') or (number_of_data == 'SOME'):
data = soup.select(selector)
objs = ''
for rep in data:
objs += rep.text + '\n'
elif (number_of_data == 'only') or (number_of_data == 'Only') or (number_of_data == 'ONLY'):
objs = soup.select_one(selector).text
return objs
실험
if __name__ == '__main__':
url = 'https://search.daum.net/search?w=news&DA=PGD&enc=utf8&cluster=y&cluster_page=1&q=' \
'%EC%99%B8%EA%B5%AD%EC%9D%B8+%EA%B7%BC%EB%A1%9C%EC%9E%90+%EC%B5%9C%EC%A0%80%EC%9E%84%EA%B8%88&p='
akc = advanced_kim_crawl(url)
pprint(kca.get_obj('a[href].f_link_b', 'SOME'))
-- 결과 --
전체 코드
# -*- coding : utf-8 -*-
try:
from bs4 import BeautifulSoup as bs
from pprint import pprint
import requests as req
from time import sleep
import winsound as ws
import os
class advanced_kim_crawl:
def __init__(self, in_url):
self.url = in_url
def get_parser(self):
html = req.get(self.url)
self.soup = bs(html.content, 'lxml')
return self.soup
def get_obj(self, selector, number_of_data):
soup = self.get_parser()
if (number_of_data == 'some') or (number_of_data == 'Some') or (number_of_data == 'SOME'):
data = soup.select(selector)
objs = ''
for rep in data:
objs += rep.text + '\n'
elif (number_of_data == 'only') or (number_of_data == 'Only') or (number_of_data == 'ONLY'):
objs = soup.select_one(selector).text
return objs
if __name__ == '__main__':
url = 'https://search.daum.net/search?w=news&DA=PGD&enc=utf8&cluster=y&cluster_page=1&q=' \
'%EC%99%B8%EA%B5%AD%EC%9D%B8+%EA%B7%BC%EB%A1%9C%EC%9E%90+%EC%B5%9C%EC%A0%80%EC%9E%84%EA%B8%88&p='
akc = advanced_kim_crawl(url)
pprint(kca.get_obj('a[href].f_link_b', 'Some'))
except NameError as e:
print('!'*20 + '[ Alert! Error Occurred! ]' + '!'*20)
print('Error name : ', e)
for beep in range(1, 6):
ws.Beep(1500, 2000)
sleep(5)
[1] 기존 Kim_crawl_MK.1에서는 크롤링을 하기 위해 find, find_all, findAll 함수를 사용해 신경써야할 매개변수도
굉장히 많았고, 중첩 조건문 때문에 클래스 부분 코드가 35줄이나 되었다.
하지만 이번 Kim_crawl_MK.1.1에서는 크롤링 하기 위해 select와 select_one 함수를 채택함으로써
신경써야 할 매개변수 수도 줄였고, 중첩 조건문도 하나도 없기 때문에 코드가 24줄로 줄었다.
코드가 돌아가는 시간을 조사해 봐야겠지만, 코드가 줄어듦에 따라 크롤링 하는 속도가
조금은 빨라질 것으로 기대한다.
[2] 다음번에 업그레이드를 할 떄는 텍스트 데이터 뿐만 아니라 이미지 데이터도 크롤링 할 수 있고,
selenium을 활용하여 여러 페이지에 걸쳐서 크롤링을 할 수 있도록 시도해 봐야겠다.
'Data Science > Crawler' 카테고리의 다른 글
#3. Kim_crawl_MK.2.1 (김_크롤_2.1호) (0) | 2019.06.28 |
---|---|
#2. Kim_crawl_MK.2 (김_크롤_2호) (0) | 2019.06.28 |
#1. Kim_crawl_MK.1 (김_크롤_1호) (0) | 2019.06.27 |
Comments