크롤링
웹사이트에 접속해서 데이터를 솎아내어 가져오는 기술
크롤링에 필요한 라이브러리 설치 - beautifulsoup4
beautifulsoup4 - 파이썬에서 크롤링을 할 때 사용하는 라이브러리
HTML 및 XML 문서를 파싱 하는 것을 쉽게 만들어주어 사용자가 웹 사이트에서 필요한 정보를 추출할 수 있도록 도와줌
※가상환경이 활성화되었는지 확인하고 설치
pip install bs4
크롤링 기본 세팅
import requests
from bs4 import BeautifulSoup
# 타겟 URL을 읽어서 HTML를 받아오고,
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('여기에 url 입력',headers=headers)
# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
# soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨
soup = BeautifulSoup(data.text, 'html.parser')
### 이제 코딩을 통해 필요한 부분을 추출하면 됨 ###
beautifulsoup라이브러리의 select / select_one 사용법
# 선택자를 사용하는 방법
select('태그명')
select('.클래스명')
select('#아이디명')
select('상위태그명 > 하위태그명 > 하위태그명')
select('상위태그명.클래스명 > 하위태그명.클래스명')
# 태그와 속성값으로 찾는 방법
select('태그명[속성="값"]')
# 한 개만 가져오고 싶은 경우
select_one('위 내용과 동일')
네이버영화 페이지 크롤링 해보기
#네이버 영화페이지
https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829
영화 제목 하나 가져와보기
1. 타겟 URL접속 -> 가져오고 싶은 곳에 우클릭 -> 검사
2. Copy -> Copy selector
3. beautifulsoup의 select_one()을 사용해서 터미널에 찍어보기
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://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
# Copy한 것 붙여 넣기
a = soup.select_one('#old_content > table > tbody > tr:nth-child(2) > td.title > div > a')
print(a)
4. 태그 안의 텍스트/ 속성을 터미널에 찍어보기
태그 안의 텍스트 가져오기 → 태그.text
태그 안의 속성 가져오기 → 태그['속성']
b = soup.select_one('#old_content > table > tbody > tr:nth-child(2) > td.title > div > a').text
print(b)
영화 제목 모두 가져와보기
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://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
#old_content > table > tbody > tr:nth-child(2)
#old_content > table > tbody > tr:nth-child(3)
# <tr>들의 공통되는 부분 추출후 select를 이용해서, tr들을 불러오기
trs = soup.select('#old_content > table > tbody > tr')
#반복문 돌려서 원하는 데이터 뽑기
for tr in trs:
a = tr.select_one('td.title > div > a')
if a is not None: #조건에 대한 이유 밑에 더보기란
print(a.text)
더보기
for tr in trs:
a = tr.select_one('td.title > div > a')
if a is not None:
print(a.text)
위 코드에서 if a is not None:를 지우고 실행시키면 에러 발생
그 이유는 웹 사이트 자체에서 10과 11 사이의 줄도 tr로 만들었고
text가 없기 때문
'[스파르타 코딩클럽] > 비개발자를 위한, 웹개발 종합반' 카테고리의 다른 글
mongoDB기초/pymongo DB조작 코드 (0) | 2023.02.23 |
---|---|
웹스크래핑(크롤링)기초 및 연습2 (0) | 2023.02.23 |
파이썬/터미널 설정/기초 문법/venv 설치 방법/Requests라이브러리 (2) | 2023.02.23 |
Fetch연습2 (0) | 2023.02.20 |
서버-클라이언트 통신(GET,POST)/JSON/Fetch연습 (0) | 2023.02.20 |