크롤링이란 뭘까?
크롤링이란
크롤링에서는 크롤링에 필요한 beautifulsoup4라는 라이브러리 및 패키지가 필요하다.
다운받자..!
크롤링을 할때는 기술적으로 2가지가 중요하다.
첫번째는 요청을 하는것이다. 코드딴에서 말이다. 브라우저를 키지않고 말이다.
두번쨰는 html안의 정보를 내가 원하는 정보로 솎아내는것이다.
이때 잘 솎아내는게 이 beautifulsoup의 역할이다.
항상 크롤링을 할때는 기본코드가 있다. 잊지말자!
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.nhn?sel=pnt&date=20200303',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
# 코딩 시작
이게 기본코드이다.
여기서 headers는 기본적인 크롤링을 막아놓은 브라우저를 막아놓은 브라우저를 풀어주는 역할을 한다.
자 아래와 같이
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.nhn?sel=pnt&date=20200303', headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
title = soup.select_one(
"#old_content > table > tbody > tr:nth-child(2) > td.title > div > a")
print(title.text)
soup.select_one()에서 select_one()메소드는 브라우저에서 찾고자 하는 태그를 선택할때 사용한다.
브라우저에서 "검사"->"copy Selector"이렇게 한다.
위와 같은 경우는 title.text를 사용해서 제목을 text로 가지고 올때 이용하는것이고,
반대로 title태그의 속성을 가지고 오고 싶을때는 "title["href"]"를 이용한다.
자, 이제 여러개의 내용을 가지고 올때는 select를 이용한다.
#old_content > table > tbody > tr:nth-child(2)
#old_content > table > tbody > tr:nth-child(3)
자 이런식으로 검사 해서 copy selector하면 위와 같이 나온다.
여기서 다른부분은 tr:nth-child(3) 이 부분이고
여기서 tr부분만 남긴다.
#old_content > table > tbody > tr
이렇게 만든다.
여기서 select 는 결과가 list로 나온다.
그래서 for 구문을 이용해서 하나씩 나오게 만든다.
자 여기서 인제 제목만 구하기 위해서는
다시 제목을 검사 copy selector 이용해서
#old_content > table > tbody > tr:nth-child(2) > td.title > div > a 여기서 찾은부분을 제외한
td.title > div > a 이 부분만을 이용한다.
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.nhn?sel=pnt&date=20200303', headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
trs = soup.select(
"#old_content > table > tbody > tr")
for tr in trs:
a_tag = te.select_one(" td.title > div > a ")
print(a_tag)
이렇게 하면
이런식으로 결과값이 나온다.
여기서 잘 보면 중간중간에 None이 있다.
이거를 잘 보면 none은 아래와같은 이런 줄들이다.
이런 구분선(줄) 안에서 text를 가지고 오면 에러가 발생한다.
즉, print(a_tag.text)하면 에러가 발생한다.
그래서 이럴떄는
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.nhn?sel=pnt&date=20200303', headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
trs = soup.select(
"#old_content > table > tbody > tr")
for tr in trs:
a_tag = tr.select_one("td.title > div > a")
if a_tag is not None:
title = a_tag.text
print(title)
이렇게 하면 된다!!!
'웹 프로그래밍(풀스택-->python)' 카테고리의 다른 글
33. DB 설치 확인 (0) | 2021.04.23 |
---|---|
32. Quiz_웹스크래핑(크롤링) 연습 (0) | 2021.04.20 |
30. 패키지 사용해보기 (0) | 2021.04.19 |
29. 파이썬 패키지 설치하기 (0) | 2021.04.17 |
28. 파이썬 기초공부 (0) | 2021.04.16 |