주간책톡(부산 도서관) 크롤링 -5 페이지를 순회하며 크롤링

2023. 4. 27. 22:17프로젝트/주간책톡

이제 요약이 있는 링크들을 순회하며 크롤링 할 차례다.

 

link열의 내용을 하나씩 출력이 되는 것을 확인하고,

 

book_summary = driver.find_element(By., "book_summary")

class = "book_summary" , id = "bookSummary" .

class 를 기준으로 요소를 찾으면 위의 음성파일을 깨진형태로 받아서

id 값으로 요약문을 지정해 주었다.

 

위의 기능을 구현한 모듈들을 차례대로 조립하여,

index_length = book_df.shape[0]

book_summary_list = []
for i in range(index_length):
    tmep_url = book_df['link'][i]
    driver.get(tmep_url)
    time.sleep(2)
    
    temp_summary = driver.find_element(By.ID,"bookSummary")
    book_summary_list.append(temp_summary.text)
    time.sleep(2)

book_df.shape[0] 으로 

shape는 튜플 형태로, 첫번째 요소는 데이터프레임의 행의 수, 두번쨰 요소는 열의 수를 나태난다.

그래서 book_df.shape[0] 은 6 (int) 이다.

 

book_df['link'] 를 하나씩 temp_url 에 넣어 브라우저에 get으로 주어 순회한다.

그리고 브라우저가 이동하면, ID 가 "bookSummary" 인 요소를 temp_summary 에 저장한다.

그것을 booK-summary_list 에 하나씩 저장한다.

 

요약이 모두 리스트에 잘 담겼다.

 

이를 book_df 데이터 프레임에 추가해보면

 

book_df = book_df.assign(book_summary=book_summary_list)

끝에 잘 추가 되었다.

 

이를 슬랙 봇으로 보내보면

 

dataframe.at[] 라벨을 기준으로 단일 값에 접근하는데 사용.

.행과 열의 라벨을 인자로 받음

at[row_label(int), column_label(string)]

import requests
import json 

def send_slack_message():
    bot_url = '슬랙봇주소'
    payload = {
        "text" : book_df.at[0,"book_summary"]
    }
    
    # get, post => CRUD
    response = requests.post(
        bot_url,
        data=json.dumps(payload), 
        headers={"Content-Type":"application/json"}
    )
    
    print(response)
    
send_slack_message()

봇으로 잘 보내진 모습이다.

 

원래의 tabulate 를 이용해서 table 코드블록 형식으로 보내면

너무 길어서 형식이 깨진다.

 

 

정리

요약 전문이 생각보다 길어 df 에 같이 담아 전송하면 보기 좋지 않고, text 양이 많아 리소스 문제가 될 수도?

-> 일단 요약 전문은 text 형식으로 저장해두고, 기본 형태인

title, author, publisher, publication_date, link, book_nutshell  컬럼 을 유지하여 슬랙봇에 제공한다.

 

남은 과제는 주마다 올라오는 것을 자동화 크롤링 하는것.

 

 

 

728x90