인프런 커뮤니티 질문&답변

JunHo KANG님의 프로필 이미지

작성한 질문수

파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)

크롤링과 업무 자동화 기술: 네이버 Open API 활용, 네이버쇼핑 엑셀 보고서 만들기

텍스트만 추출하기

21.02.04 11:24 작성

·

357

0

드디어 막바지가 보이네요! 명강의 감사드립니다 ㅎㅎ

다른분들이 질문하신 것처럼, 크롤링했을 때 함께 추출되는 태그를 없애고 싶었습니다.

'<b>갤럭시S21</b> 가격 19만원대 판매, S20 및 노트20 울트라 특가 프로모션'

원초적인 방법으로 해결하려고 우선 replace를 사용해서 해결은 했는데요, 만약 <b>태그 뿐만 아니라 더 복잡하게 많은 태그들이 있다면, 그걸 일일이 replace로 해결을 해야하나요? ㅠㅠ

get_text()와 string이 안되는 원인을 찾다가, 이 메서드들은 BeautifulSoup의 메서드인 사실을 발견하고 import했지만, 

AttributeError: 'str' object has no attribute 'get_text'

이러한 에러가 여전히 발생했습니다.

새로운 기능이 추가되기 전까지 replace로 해결을 해야하는지 아니면 다른 방법이 있는지 궁금합니다 ! 구글링을 더이상 해봐도 진전이 없어서 질문드립니다 ㅠㅠ

아래는 제 코드입니다.

import requests
from bs4 import BeautifulSoup
import openpyxl
client_id = '비공개'
clinent_secret = '비공개'

start, num = 1, 0

excel_file = openpyxl.Workbook()
excel_sheet = excel_file.active
excel_sheet.column_dimensions['B'].width = 100
excel_sheet.column_dimensions['C'].width = 100
excel_sheet.append(['랭킹', '제목', '링크'])



for index in range(10):
    start_number = start + (index * 100)
    naver_open_api = 'https://openapi.naver.com/v1/search/news.json?query=갤럭시 S21&display=100&start=' + str(start_number)
    header_params = {"X-Naver-Client-id": client_id, "X-Naver-Client-Secret": clinent_secret}
    res = requests.get(naver_open_api, headers=header_params)
    if res.status_code == 200:
        data = res.json()
        for item in data['items']:
           num += 1
           title = item['title'].replace('<b>', '').replace('</b>', '')
           excel_sheet.append([num, title, item['link']])
    else:
        print("Error Code", res.status_code)


excel_file.save('Crawling.xlsx')
excel_file.close()
print('엑셀처리 완료')

답변 2

0

이준현님의 프로필 이미지

2022. 01. 20. 14:05

아 replace 함수로 <b>를 없앨수 있군요.

알려주셔서 감사합니다!

0

JunHo KANG님의 프로필 이미지
JunHo KANG
질문자

2021. 02. 04. 11:43

추가질문입니다.

append를 사용하게 되면,

[['랭킹', '제목', '링크'], ['1', '연습', 'http']]

이런식으로 생기게 되는데, 어떻게 엑셀파일에 순차적으로 딱.딱.딱. 행 변환이 되나요?? 따로 명령해준 것도 없는데...

구글링해보고 싶었는데 키워드를 어떻게 해야할지 모르겠어요 ㅠㅠ 혹시..이 부분에 대해서 조언이 있으시다면 꼭 좀 부탁드리겠습니다 !