네이버 영화 사이트 이용
https://movie.naver.com/movie/search/result.naver?query=%EB%B6%80%EC%82%B0%ED%96%89§ion=all&ie=utf8
import request #페이지 가져오는 라이브러리
from bs4 import BeautifulSoup #html에서 원하는 정보만 가져오는 라이브러리 (파싱)
1. 페이지 가져오기
page = requests.get(url)
2. 파싱(그냥 가져오면 하나의 string으로 가져와지기때문에 html.parser로 파싱해줘야함
soup = BeautifulSoup(page.content, 'html.parser')
3. 페이지 가져오는거 성공했다는거 알고싶으면
print(page.status_code) --> 200
or
print(page) --> <Response [200]>
#200이 나왔다는건 성공했다는 뜻
* soup은 1번에서 해당 페이지의 html정보 가져온 것
1. find를 이용할 경우
soup.find('dt').find('a')
#우선 dt태그에 접근한 후 a태그에 다시 접근함
2.select_one을 이용할 경우
soup.select_one('dt > a')
#한번에 a태그로 들어감
둘 다 같은 결과 : <a href="/movie/bi/mi/basic.naver?code=130966"><strong>부산행</strong> (TRAIN TO BUSAN)</a>
** a태그는 dt태그안에서만 사용하는게 아니라 다른 곳에서도 사용하고 있다.
** 따라서, 처음부터 a태그로 들어가면 나한테 필요없는 정보들이 많이 들어가기 때문에 정확하게 위치를 지정해주는 것이 좋다.
1. find, select_one을 이용할 경우
#해당 페이지에 존재하는 dt>a태그 중 가장 상위 값 가져옴
#결과는 위와 같다
--------------------------------------
--------------------------------------
2. find_all또는 select를 사용할 경우
#해당 페이지에 존재하는 모든 dt태그를 가져온다.
* find_all
dts = soup.find_all('dt')
#dt태그에 해당하는 모든 값을 가져온다.
for i in dts:
i.find('a')
#a태그에 해당하는 모든 값을 가져온다.
결과:
<a href="/movie/bi/mi/basic.naver?code=130966"><strong>부산행</strong> (TRAIN TO BUSAN)</a>
<a href="/movie/bi/mi/media.naver?code=130966"><strong>부산행</strong></a>
결과값의 타입:
<class 'bs4.element.Tag'>
<class 'bs4.element.Tag'>
--------------------------------------
*select
soup.select('dt>a')
결과:
[<a href="/movie/bi/mi/basic.naver?code=130966"><strong>부산행</strong> (TRAIN TO BUSAN)</a>,
<a href="/movie/bi/mi/media.naver?code=130966"><strong>부산행</strong></a>]
결과값의 타입:
<class 'bs4.element.ResultSet'>
1. find_all, select:
<class 'bs4.element.ResultSet'>
2. find:
<class 'bs4.element.Tag'>
3. for i in find_all or select:
<class 'bs4.element.Tag'>
# i의 타입
1번 타입은 list처럼 사용할 수 있다.
* select_one or select를 사용할 때
1. select_one
soup.select_one('dt>a')['href']
결과: /movie/bi/mi/basic.naver?code=130966
결과값 타입: str
2. select #리스트처럼 사용가능
soup.select('dt>a')[0]['href']
결과:
/movie/bi/mi/basic.naver?code=130966
결과값 타입: str
* find or find_all
1. find
soup.find('dt').find('a')['href']
2. find_all
dts = soup_title.find_all('dt')
for i in dts:
print(i.find('a')['href'])
결과:
/movie/bi/mi/basic.naver?code=130966
/movie/bi/mi/media.naver?code=130966
결과값 타입:
str
str
soup.select_one().text
결과값 타입: str