본문 바로가기
Python/머신러닝, 딥러닝

[파이썬] 웹 크롤링 후 csv로 저장하기 - Pandas / BeautifulSoup

by IT두잇 2022. 4. 22.

네이버의 view 페이지에서 키워드를 검색하면 나오는 사이트들을 제목링크로 정리해보려 합니다. 

예시)

title link
제목 1 사이트 링크 1
제목 2 사이트 링크 2

 

<  웹 크롤링  >

먼저, 필요한 라이브러리를 설치해줍니다. 

import urllib.request as req
from bs4 import BeautifulSoup
cs

 

키워드를 입력받아 네이버 검색 페이지 url 링크 설정

url1 : 네이버 view 페이지 / url2 : 검색어

url1 = 'https://search.naver.com/search.naver?where=view&sm=tab_jum&query='
url2 = input('검색어를 입력해주세요: ')
url = url1 + url2
 
cs

 

BeautifulSoup 라이브러리로 데이터를 파싱해줍니다. 

res = req.urlopen(url).read() #링크 열고 읽기
 
soup = BeautifulSoup(res, 'lxml'#파싱
cs

 

정리된 데이터 중에서 사이트 게시물의 제목과 링크를 각각 저장해줍니다. 

여기에서는 find와 find_all을 사용하는 두가지 방법이 있습니다 : )

각각 title에는 제목을, link에는 페이지 링크가 저장될 수 있도록 정리했습니다. 

 

1) find 사용 예시

blog = soup.find(class_= 'api_txt_lines total_tit _cross_trigger')
 
link = blog.attrs['href']
title = blog.text
 
cs

 

2) find_all 사용 예시

info = soup.find_all(class_= 'api_txt_lines total_tit _cross_trigger')
 
for a in info:
    link = a.attrs['href']
    title = a.text
    print(title)
    print(link)
    print()
 
cs

 


<  csv로 데이터 저장 >

csv로 데이터를 저장할 수 있도록 pandas 라이브러리를 설치해줍니다. 

import pandas as pd
cs

 

이제 저장한 title과 link 값을 DataFrame으로 합치는 과정이 필요합니다.

총 두가지 방법을 아래 정리했습니다. 

 

1) 각각 리스트로 만들어 결합하기

title =[]
link = []
 
for a in info:
    title.append(a.text)
    link.append(a.attrs['href'])
    print(title)
    print(link)
    
df = pd.DataFrame({'title':title, 'link':link})
 
df = pd.DataFrame([title, link]).T # 자료 세로로 넣기
df.columns = ['title''link'#칼럼 이름 설정
cs

 

 

2) 데이터 나오는 순서대로 DataFrame에 값 넣기

df = pd.DataFrame(columns = ['title''href'])
for a in info:
    df.loc[len(df), :] = [a.text,a.attrs['href']]
cs

 

 

마지막으로, 데이터를 csv로 변환해서 저장해줍니다 :)

저장한 csv파일은 working directory에서 확인할 수 있습니다!

df.to_csv('link1.csv', encoding = 'cp949')
cs