웹크롤링이란
인터넷에 있는 웹 페이지를 자동으로 탐색하고 정보를 수집하는 과정이다. 이를 수행하는 소프트웨어를 크롤러 또는 스파이더라고 한다.(crawler, spider)
왜 필요하나?
데이터 수집: 웹사이트에서 유요한 정보를 대량으로 수집할 수 있다.
검색엔진 최적화: 웹사이트와 콘텐츠를 검색 엔진에 인텍싱하기 위해 사용한다.
시장 조사: 경쟁사 웹사이트 분석, 고개길뷰 수집 등에 활용한다.
크롤링 과정
1. 시작 url 선택: 크롤링을 시작 할 웹페이지 주소를 선택한다.
2. 링크 탐색: 페이지에 있는 링크를 찾아 다른 페이지로 이동한다.
3. 데이터 추출: 원한느 정보를 추출한다.
4. 반복: 다른 페이지로 이동하여 이 과정을 반복한다.
HTML 태그(Tags)
웹페이지의 기본 구성요소
테그 형식 으로 작성되고, 대부부의 태그는 시작태그 와 /tags종료 태그로 구성된다.
는 단락을 나타내는 태그이다.
ID 속성
HTML 요소에 고유한 식별지를 ㅔㅈ공한다.
페이지 내에서 유일해야 하며, 주로 javascipt나 css에서 요소를 식별할 때 사용된다.
class 속성
HTML 요소에 하나 이상의 클래스를 지정합니다.
같은 스타일을 공유하는 여러요소에 사용되며, CSS에서 스타일을 적용하거나 javascipt에서 요소를 선택할 때 유용하다.
#crawling
import requests
from bs4 import BeautifulSoup
url = 'https://finance.naver.com/sise/'
response = requests.get(url)
data = response.text
soup = BeautifulSoup(data,'html.parser')
print(soup)
############################네이버 금융에서 F12누르고 인기 순위만 가져온다음에 거기에서 리스트만 뽑아낸 코드###################
#crawling
import requests
from bs4 import BeautifulSoup
url = 'https://finance.naver.com/sise/'
response = requests.get(url)
data = response.text
soup = BeautifulSoup(data,'html.parser')
stockList = soup.find(id='popularItemList')
print(stockList)
for i in stockList:
print(i.text)
#########################홈페이징에서 현대차가 a이고, 가격이 span으로 나와서 그렇게 친거임####################
#crawling
import requests
from bs4 import BeautifulSoup
url = 'https://finance.naver.com/sise/'
response = requests.get(url)
data = response.text
soup = BeautifulSoup(data,'html.parser')
stockList = soup.find(id='popularItemList').find_all('li')
print(stockList)
dataList = []
for i in stockList:
company = i.find('a').text
stock = i.find('span').text
dataList.append({'company':company,'stock':stock})
print(dataList)
파이썬을 사용하여 웹페이지에서 데이터를 추출하는데 널리 사용되는 라이브러리이다. HTML과 XML 파일의 파싱을 단순화하여, 웹스크래핑을 위한 강력하고 직관적이 도구를 제공한다.
BeautifulSoup4 의 주요 메소드
1. BeautirulSoup 객체 생성: 웹페이지 HTML을 파싱하고, BeautifulSoup 객체로 변환한다. 이 객체를 통해 데이터에 쉽게 접근하고 조작할 수 있다.
2. find()와 find_all(): 특정 태그나 조건에 맞는 요소를 찾습니다. find()는 첫번째 매칭 요소를, find_all()은 조건에 맞는 모든 요소를 리스트로 반환한다.
3. select(): CSS 선택자를 사용하여 요소를 찾는다. 복잡한 HTML구조에서도 원하는 요소를 정밀하게 선택할 수 있다.
4. get_text(): 선택한 요소에서 텍스트 내용만을 추출한다. 데이터 클리닝이나 텍스트 기반 분석에 유용하다.
#crawling
import requests
from bs4 import BeautifulSoup
url = 'https://www.musinsa.com/ranking/best?new_product_yn=Y'
response = requests.get(url)
data = response.text
soup = BeautifulSoup(data,'html.parser')
clothesList = soup.find(id='goodsRankList').find_all('li')
companyList = []
for i in clothesList:
company = i.select('.item_title > a')
if company:
companyList.append(company[0].text)
print(companyList)
compute engine api가 있따.
#############유튜브 한국 대 호주 하는 유튜브에서 댓글 100개 가져 올거다
key는 쌤이 준거고 kW_z-NMuZIU는 url에서 따온거다 원래는 v=kW_z-NMuZIU였는데 v가 비디오여서 v 빼고 쓴거다.
#API(어느 회사에서 제공하는 서비스 프로그램)
from googleapiclient.discovery import build
key = "AIzaSyA8VRK8GqobS2yWJHn4Aj7-VDnqei_H82g"
#유튜브 api 클라이언트 생성
youtube = build('youtube','v3',developerKey=key)
result = youtube.commentThreads().list(
part = 'snippet',#댓글들이라고 스니핏이라고 한다.
videoId = 'kW_z-NMuZIU',
maxResults = 100,
).execute()
for i in result['items']:
print(i)
#############위에거에서 댓글들만 나오게 함 #################
#API(어느 회사에서 제공하는 서비스 프로그램)
from googleapiclient.discovery import build
key = "AIzaSyA8VRK8GqobS2yWJHn4Aj7-VDnqei_H82g"
#유튜브 api 클라이언트 생성
youtube = build('youtube','v3',developerKey=key)
result = youtube.commentThreads().list(
part = 'snippet',#댓글들이라고 스니핏이라고 한다.
videoId = 'kW_z-NMuZIU',
maxResults = 100,
).execute()
for i in result['items']:
comment = i['snippet']['topLevelComment']['snippet']['textDisplay']
print(comment)