Studio KimHippo :D

#4. Kim_crawl_MK.1.1 (김_크롤_1.1호) 본문

Data Science/Crawler

#4. Kim_crawl_MK.1.1 (김_크롤_1.1호)

김작은하마 2019. 7. 9. 02:09

필요 패키지

    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