장르 자동 분류기 만들기 #4

Apic·2023년 2월 4일
0

심심한 프로젝트

목록 보기
4/18

이전까지는 카카오 페이지의 소설 정보들을 크롤링했다.

데이터 프레임까지 다 만들었으니 이제는 네이버 소설을 크롤링할 차례다.

먼저 네이버 시리즈 각 카테고리의 링크들을 가져오자

# 네이버 소설 크롤링 본문
url_list = {
    '로맨스': 'https://series.naver.com/novel/categoryProductList.series?categoryTypeCode=genre&genreCode=201&page=', # 로맨스
    '로판': 'https://series.naver.com/novel/categoryProductList.series?categoryTypeCode=genre&genreCode=207&page=', # 로판
    '판타지': 'https://series.naver.com/novel/categoryProductList.series?categoryTypeCode=genre&genreCode=202&page=', # 판타지
    '현판': 'https://series.naver.com/novel/categoryProductList.series?categoryTypeCode=genre&genreCode=208&page=', # 현판
    '무협': 'https://series.naver.com/novel/categoryProductList.series?categoryTypeCode=genre&genreCode=206&page=', # 무협
    '미스터리': 'https://series.naver.com/novel/categoryProductList.series?categoryTypeCode=genre&genreCode=203&page=', # 미스터리(판타지)
}

이번에는 이전과는 다른 방식으로 효율성을 높였다.
저번에는 한 카테고리리를 크롤링 할 때마다 파일 이름을 바꿔주며 했는데, 이번에는 딕셔너리로 만들어, 키 값을 파일 이름으로 넣는 방식으로 했다.

또한 함수를 만드는 방식으로 코드를 작성했다.

for name, url in url_list.items():
    write_novel_file(name, url)
# 링크 가져와서 텍스트 파일로 저장하는 함수
def write_novel_file(genre_name, url):
    i = 1
    cnt = 0
    prev_soup = 0
    f = open(f'{genre_name}.txt', 'w')
    while True:
        now_url = url+str(i)
        rq = requests.get(now_url)
        time.sleep(.5)
        
        soup = BeautifulSoup(rq.content, 'html.parser')
        
        # 페이지의 끝에 도달하면 반복 끝내기
        if prev_soup == soup:
            break

        novel_list = soup.select('#content > div > ul > li')
        for novel in novel_list:
            href = novel.find('a')['href']
            print(href, file=f)
            cnt += 1
            
        print(f'{i} 페이지 완료')
        i += 1
        prev_soup = soup
        
    f.close()
    print(f'{genre_name} 완료, {cnt}')

전체적인 부분은 카카오 페이지를 크롤링할 때와 비슷하기 때문에 설명은 생략한다.


profile
코딩 공부하는 사람

0개의 댓글