일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 자바
- java
- 넘파이 배열
- 넘파이 기초
- 합성곱 신경망
- 코딩테스트
- 기계학습
- cpp
- 데이터 마이닝
- 넘파이
- Machine Learning
- 디자인 패턴
- 머신러닝
- 데이터 분석
- 네트워크 기초
- numpy 기초
- c++
- OOP
- 코테
- 클러스터링
- 차원축소
- python
- 파이썬
- ack
- lambda
- Design Pattern
- cpp class
- 코딩테스트실력진단
- 코드트리
- NumPy
- Today
- Total
준비하는 대학생
[자연어 처리] 웹 스크레이핑 기초 - 1 본문
웹 스크레이핑과 웹 크롤링
웹에서 데이터를 수집하는 방법에는 크게 웹 스크레이핑과 웹 크롤링이 있습니다. 이 두 용어는 종종 혼용되어 사용되지만, 명확한 차이점이 있습니다.
웹 스크레이핑은 특정 웹사이트에서 원하는 정보를 직접 추출하는 것을 의미합니다. 예를 들어, 영화 리뷰, 뉴스 기사, SNS 데이터 등을 수집할 때 사용합니다.
반면, 웹 크롤링은 웹 스크레이핑보다 넓은 범위의 데이터를 시스템적으로 수집하는 것을 말합니다. 이는 주로 검색 엔진에서 사용되며, 연결 구조를 파악하고 인덱싱 하는 데 사용됩니다.
다양한 데이터 수집 방법
- RSS 피드: 웹 사이트의 업데이트를 XML 형식으로 제공합니다.
- OCR: 이미지나 PDF 내의 문자를 인식합니다.
- 개인화된 데이터: 사용자 동의 하에 개인화된 텍스트 데이터도 수집할 수 있습니다.
- 기업/기관 DB 및 로그 파일: 유용한 텍스트 정보를 포함하고 있을 수 있습니다.
- API: Twitter, Reddit 등은 API를 통해 데이터 수집을 허용합니다.
- 공개 데이터 셋: NLP, AI, ML 등의 분야에서 이미 공개된 데이터셋을 활용할 수 있습니다.
웹 스크레이핑 시 주의사항: robots.txt
웹 스크레이핑을 시작하기 전에는 반드시 robots.txt 파일을 확인해야 합니다. 이 파일은 웹 사이트가 어떤 크롤러나 스크레이퍼의 접근을 허용하거나 제한하는지를 지정합니다.
robots.txt의 기본 구조는 다음과 같습니다:
User-agent: *
Disallow: /private/
Allow: /public/
여기서 User-agent는 크롤러나 스크레이퍼의 이름을 지정합니다. *는 모든 크롤러를 의미합니다. Disallow와 Allow는 특정 경로의 접근을 제한하거나 허용합니다.
이미지 다운로드 방법
- 직접 다운로드: urllib.request.urlretrieve를 사용하여 이미지를 직접 다운로드 할 수 있습니다.
- 램에 올려 다운로드: urllib.request.urlopen을 사용하여 이미지를 메모리에 올린 후 저장합니다.
import urllib.request
# 직접 다운로드
urllib.request.urlretrieve('이미지_URL', '저장할_파일명.jpg')
# 램에 올려 다운로드
image = urllib.request.urlopen('이미지_URL').read()
with open('저장할_파일명.jpg', 'wb') as f:
f.write(image)
웹 페이지 데이터 정제하기
데이터 수집 후에는 BeautifulSoup을 사용하여 원하는 데이터만 추출할 수 있습니다. 데이터는 태그명, id, 클래스 등 다양한 방법으로 정제할 수 있습니다.
- 태그 명으로 추출
- t = soup.html.head.title : html의 head의 title을 가져옴
- t = soup.html.head.title.string : html의 head의 title의 문자열로만 가져옴 (원래는 <> 태그도 같이 가져온다.)
- urls = soup.find_all('a') : a 태그를 모두 가져옴 (리턴 타입은 리스트 형태)
- url.attrs['href'] : 태그의 속성 중 href의 값을 가져옴(attrs : attributes)
- id로 추출
- (university = soup.find(id="univ") : id가 univ인 태그를 가져옴
import requests
from bs4 import BeautifulSoup
url = "원하는 웹페이지의 URL"
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
# 제목 추출
title = soup.title.string
print("제목:", title)
# 본문 내용 추출
content = soup.find('div', class_='content-class-name').text # 'content-class-name'은 해당 웹 페이지의 본문 내용을 감싸고 있는 div의 클래스 이름입니다.
print("본문:", content)
위의 코드는 웹 페이지의 구조와 클래스 이름에 따라 수정이 필요할 수 있습니다. 따라서, 원하는 웹 페이지의 소스코드를 살펴보며 적절한 태그명과 클래스를 선택해야 합니다.
기상청 RSS로 날씨 데이터 가져오기
기상청의 RSS를 사용하면 각 지역의 날씨 데이터를 수집할 수 있습니다. 이를 통해 지역별 날씨 정보를 얻을 수 있습니다.
import requests
from bs4 import BeautifulSoup
response = requests.get('기상청_RSS_URL')
soup = BeautifulSoup(response.content, 'xml')
for item in soup.find_all('item'):
print(item.title.text, item.description.text)
Dataset을 이용해 데이터 불러오기
datasets 라이브러리를 사용하면 다양한 데이터셋을 쉽게 불러올 수 있습니다. 예를 들어, squad 데이터셋은 질의응답 데이터셋으로 NLP 연구에서 널리 사용됩니다.
from datasets import load_dataset
ds = load_dataset('squad')
print(ds)
'Programming > NLP' 카테고리의 다른 글
[자연언어 처리] CNN 핵심 요소 (0) | 2023.11.25 |
---|---|
[자연언어처리] 피드 포워드 신경망(MLP, CNN) (2) | 2023.11.25 |
[Deep Learning] Activation Function (활성화 함수) (0) | 2023.11.10 |