[파이썬] 스크래핑(크롤링)

2022. 12. 15. 14:57자격증(다다익선)/파이썬

728x90

https://chanytv.tistory.com/137

 

[파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문

[파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 파이썬 기초를 시작하면서.... 크롤링 한 번 해보자고 시작한 파이썬 공부다. 모든 공부는 기초가 중요한 법!! 이 번 공부로 파

chanytv.tistory.com

 

[파이썬] 스크래핑(크롤링) 실습


웹스크래핑 전 HTML 이해하기

이 전에는 스크래핑은 엑셀이나 구글 스프레드시트 등에서 많이 해봤던 터라 그렇게 어렵지 않았다.


스크래핑 환경구성 - 명령어(?) 설치하기 -

엑셀에서도 그렇고 스크래핑을 하기 전에 환경 구성은 필수다. Colab에서도 마찬가지였다.

pip install bs4 requests

명령어 이해

bs4 = beautifulsoup4 / 잘은 모르겠으나 파이썬으로 HTML 코드를 긁어오는 명령어인 듯.

requests = HTTP에 요청을 보내는 명령어인 듯.

 

기본적으로 두 개면 되는 듯 하다.

import requests
from bs4 import BeautifulSoup

headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get('https://search.naver.com/search.naver?where=news&ie=utf8&sm=nws_hty&query=삼성전자',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

requests를 가져와라

bs4부터 beautifulsoup를 불러와라

 

headers와 data는 저렇게 구성이 되어 있는 것이라 저렇게 써야 할 듯하다.

data만 보면 입력한 주소에서 값을 불러와라. 여기까지가 HTML을 불러오는 작업 같다.

a = soup.select_one('#sp_nws1 > div.news_wrap.api_ani_send > div > a')
a['href']
a.text

 

태그를 불러오는 명령어는 select다. 한 개만 불러온다면 뒤에 '_one'만 붙이면 된다.

해당 태그에서 a['href']는 주소를 불러오고 a.text는 태그 안에 문자를 불러오게 된다.

 

반복된 태그에서 값을 가져오려면 당연히 list와 for문을 응용하면 된 것이다.

lis = soup.select('#main_pack > section > div > div.group_news > ul > li')

for li in lis:
  a = li.select_one('a.news_tit')
  print(a.text, a['href'])

이제 다른 키워드를 검색하여 결과값을 얻는 방법이다.

주소는 아래와 같다.

https://search.naver.com/search.naver?where=news&ie=utf8&sm=nws_hty&query=삼성전자

여기서 hty&query의 값만 바꿔주면 다른 해당 키워드의 결과를 불러올 수 있다.

def get_news(keyword):
  headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
  data = requests.get(f'https://search.naver.com/search.naver?where=news&ie=utf8&sm=nws_hty&query={keyword}',headers=headers)

  soup = BeautifulSoup(data.text, 'html.parser')
  lis = soup.select('#main_pack > section > div > div.group_news > ul > li')

  for li in lis:
    a = li.select_one('a.news_tit')
    print(a.text, a['href'])
    
    get_news('피파온라인4')

함수를 활용하여 keyword를 만들었다. 여기서 주의해야 할게 키워드가 들어가는 주소 앞에 'f'가 들어간다는 점이다.

함수가 적용되는 위치를 지정해주는 건가? 뭐 아무튼 이것도 그냥 저렇게 외어야 할 듯하다.

키워드 함수 적용이 다 끝났다면 get_news('검색하고자 하는 키워드')를 입력하면 값이 출력되는 것을 확인할 수 있다.

728x90