3주차-8 웹스크래핑(크롤링)기초
crawling(scraping) > 웹 페이지를 그대로 가져와서 데이터를 추출하는 것
requests > 자료를 요청하고
BeautifulSoup > 자료를 솎아낸다.
1)솎아낸 자료 나타내기
import requests
from bs4 import BeautifulSoup
//headers는 브라우저에서 엔터친 것과 같은 효과를 내는 것
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를 요청해서 갖고오기
data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&date=20200303',headers=headers)
//data의 정보를 솎아내기 좋게 BeautifulSoup형태로 만들어서 나타내기
soup = BeautifulSoup(data.text, 'html.parser')
print(soup) >>html 코드자료가 좌르륵 나옴
2)솎아낸 자료 중 원하는 값만 나타내기
**해당 제목에 커서를 둔 후 검사창켜기 > elements > 해당부분 copy selector > soup.select.one('') 괄호안에 붙여넣어주기
title = soup.select_one('#old_content > table > tbody > tr:nth-child(2) > td.title > div > a')
1-print(title) //해당 title값 가져오기
2-print(title.text) //해당 텍스트값만 가져오기
3-print(title['href']) //해당 속성값만 가져오기
결과값 >
1-<*a href="/movie/bi/mi/basic.naver?code=171539" title="그린 북">그린 북 // 그린 북
2-그린북
3-/movie/bi/mi/basic.naver?code=171539
3)전체자료 불러와서 솎아내기
해당페이지의 제목에 커서 후 elements 확인 한 줄이 어디까지인지 확인하여 copy selector 후 붙이기 >2번하기!
#old_content > table > tbody > tr:nth-child(2)
#old_content > table > tbody > tr:nth-child(3)
다른 부분은 끝에 숫자이므로 잘 보면
:nth-child(숫자) >> 이 부분은 특정한 부분으로 지워주면 전체 자료가 불러올 수 있다는 것을 의미!!!!
#old_content > table > tbody > tr 이렇게만 남겨주기!
trs를 따로 지정해주고 정보가 여러개이므로 select로 사용하기!
trs = soup.select('#old_content > table > tbody > tr')
for tr in trs: //trs정보를 tr에 담는다
print(tr) // tr정보만 다 나온다
3)솎아낸 정보 중 제목만 뽑아내기
해당 제목부분 copy selector 후 붙여넣기
#old_content > table > tbody > tr:nth-child(2) > td.title > div > a
여기서!!
*td.title > div > a // 이 부분만 잘라내주기
for tr in trs:
//a_tag을 한 부분으로 지정하므로selcet_one사용하여 ('')안에 붙여넣어주기
a_tag = tr.select_one('td.title > div > a')
print(a_tag)
결과값 >
이런식으로 해당화면의 tr중 title값만 좌르륵 뜬다!!
<a href="/movie/bi/mi/basic.naver?code=171539" title="그린 북">그린 북</a>
<a href="/movie/bi/mi/basic.naver?code=174830" title="가버나움">가버나움</a>
BUT ! 중간에 공란값인 none이 있는 경우가 있어 값이 도출안되는 경우가 있으므로 if문을 사용한다!
유의할 것은 print(atag.text)를 하면 none값에는 text적용하지 말라는 에러메시지가 뜬다ㅠㅠ
If문 예시를 이용하면 none값은 제외됨
for tr in trs:
a_tag = tr.select_one('td.title > div > a')
if a_tag is not None:
print(a_tag)
이번엔 여기서 title의 텍스트 값만 추출하기
for tr in trs:
a_tag = tr.select_one('td.title > div > a')
if a_tag is not None:
title = a_tag.text //text값 지정
print(title)
결과값 >
그린 북
가버나움
베일리 어게인
주전장
Author And Source
이 문제에 관하여(3주차-8 웹스크래핑(크롤링)기초), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@vividyo/3주차-8-웹스크래핑크롤링기초저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)