파이썬 공부하기
python BeautifulSoup 모듈
최근에 공부하고 있어서 게속 업데이트 될 수 있습니다.
틀린 내용이나 빠진내용이 있을 수 있습니다.
requests 모듈을 통해 요청을 보내고 그에 대한 결괏값을 받는다.
이때 받는 형태가 html이다. 이런 html 문서에서 필요한 정보만 뽑아서 이쁘게(?) 처리해주는 모듈이 BeautifulSoup이다.
1. 설치하기
pip install beautifulsoup4
2. 기본적인 사용법
from bs4 import BeaultifulSoup
from bs4 import BeaultifulSoup
import requests
URL='https://movie.naver.com/movie/point/af/list.naver'
response=requests.get(URL)
soup = BeaultifulSoup(response.text, "html.parser")
print(soup)
"html.parser" 이외에도 "lxml", "html5lib" 등의 옵션 사용 가능
3. html에서 필요한 정보 찾기
우선
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, 'html.parser')
1. soup.태그명 으로 접근 가능
2. soup.태그명.태그명
3. soup.태그명['클래스명']
4. 그 외
.children : 본인 태그 바로 하나 하위 태그
.descendants : 본인 태그 하위 태그들 전체
.parent : 본인 태그보다 하나 위 태그
.next_sibling, .previous_sibling : 자신의 제외하고 다음/전 태그
찾고 싶은 태그가 있을 때 이용한다. 해당 태그로 시작하고 끝나는 태그를 검색해서 찾을 수 있다.
같은 태그가 필요 없는 다른 위치에도 있으면 같이 가져온다. 그 외에도 class이름이나, 속성(딕셔너리 형태)을 넣어서 검색을 할 수도 있다.
해당 태그에서 텍스트 값만 필요로 할 때 .text이용할수 있다.
1. find_all : 해당 조건에 만족하는 모든 태그를 가지고 온다.
ex> find_all('태그명',{'속성명':'값', ... })
2. find : 해당 조건에 만족하는 첫 번째 태그를 가지고 온다.
3. 태그 사이에서 텍스트 값만 추출 : .text 또는 .get_text()
4. 태그에 있는 변수의 값이 필요할 때 : 태그['href']
5. 특정 값이 있어서 추출 : find('태그명', class_='클래스값'), find(id='test')
html 예시
<body>
<div id='report' class='list_netizen_score'>
<a href="naver.com" class="num"> 네이버 </a>
<a href="daum.net" class="num"> 다음 </a>
</div>
<div id='print' class='test'>
<a href="movie.naver.com" class="num"> 네이버 영화</a>
<a href="news.naver.com" class="test"> 네이버 뉴스 </a>
</div>
<span class="num"> 테스트입니다. </span>
</body>
<html>
soup.find('a') # <a> 태그들 중에서 첫 번째 태그를 가지고 온다.
<a href="naver.com" class="num" > 네이버 </a>
soup.find_all('a') # 모든 a 태그가 리스트형태로 가지고 온다.
[<a href="naver.com" class="num"> 네이버 </a>,
<a href="daum.net" class="num"> 다음 </a>,
<a href="movie.naver.com" class="num"> 네이버 영화</a>,
<a href="news.naver.com" class="test"> 네이버 뉴스 </a>]
soup.find(class_='num') # class의 값이 num인 것 중에서 첫번째 값을 가지고 온다.
<a href="naver.com" class="num> 네이버 </a>
soup.find_all(class_='num') # class의 값이 num인 것 중에서 첫번째 값을 가지고 온다.
[<a href="naver.com" class="num> 네이버 </a>,
<a href="daum.net" class="num"> 다음 </a>,
<a href="movie.naver.com" class="num"> 네이버 영화</a>,
<span class="num"> 테스트입니다. </span>]
soup.find('a', class_='test') # a 태그들 중에서 class가 num인것을 검색
[<a href="news.naver.com" class="test"> 네이버 뉴스 </a>]
attrs1={'class':'list_netizen_score','id':'report'}
soup.find('div',attrs=attrs1) # div 태그에서 attes 값에 해당하는 태그를 검색
<div id="report" class="list_netizen_score">
<a href="naver.com" class="num"> 네이버 </a>
<a href="daum.net" class="num"> 다음 </a>
</div>
names=soup.find_all('a') #리스트 형태여서 바로 text로 값을 추출 할 수 없고, for 문으로 쪼갠 후 각각에 .text를 적용해야 한다.
for name in names:
print(name.text)
네이버
다음
네이버 영화
네이버 뉴스
links=soup.find_all('a') #리스트 형태여서 바로 태그 a의 href 값을 바로 추출 할 수 없고, for 문으로 쪼갠 후 값을 얻을 수 있다.
for link in links:
print(name['href'])
naver.com
daum.net
movie.naver.com
news.naver.com
soup.find('a')['href']
naver.com
select() : css selector를 사용해서 값을 가지고 옵니다. (크롬 개발자도구에서 태그 오른쪽 클릭 copy > copy selector)
class명 앞에 . 을 사용
id 앞에서는 # 을 사용
1. select_one : 하나의 html 요소를 찾는다.
2. select : 모든 html 요소를 찾는다.
- 자손 태그 : space로 처리, 자신 태그 하위에 존재하는 모든 태그 검색
- 자식 태그 : > 로 처리, 자기 태그 바로 하위까지만 검색(한 단계 아래)
- soup.select('body > div > a.test')
- 클래스(class)로 추출:
soup.select('.hello'),
soup.select('.hello.world.hi')
- css id로 추출:
soup.select('#test'),
soup.select('.div#test')
- 속성 이용 :
soup.select('a[href]'),
soup.select('#bodyContent a[href=값]') # id=bodyContent 아래에 있는 태그들 중에서 a태그의 href값을 찾아준다.
예)
soup.select('head > title > div > .test')
soup.select('head > title > div > #id')
* 제목 부분 copy selector 해서 규칙을 찾는다 :
#old_content > table > tbody > tr:nth-child(1) > td.title > a.movie.color_b
#old_content > table > tbody > tr:nth-child(2) > td.title > a.movie.color_b
...
#old_content > table > tbody > tr > td.title > a.movie.color_b
select 전체가 나오게 하려면 이렇게 tr로 바꿔줘야 [] 리스트 형태가 된다.
tag=soup.select('#old_content > table > tbody > tr > td.title > a.movie.color_b')
select_one으로 하면, 값이 한 개만 나오기 때문에 해당 라인의 copy selector 한 것만 넣어줘도 된다. 그렇지 않으면, 공통적인 부분 처리가 필요하다.
[ 실습 하기 ]
** html 코드는 네이버 영화에서 필요 없는 부분 지우고 필요한 부분만 복사한 것입니다.
from bs4 import beautifulsoup
page = open('movie.html', 'rt', encoding='utf-8').read() # HTML 파일 읽고 문자열 리턴
soup = BeautifulSoup(page, 'html.parser')
movie.html 파일
<tbody>
<tr>
<td class="ac num">
17680613
</td>
<td class="title">
<a class="movie color_b" href="?st=mcode&sword=150371&target=after">
토니 에드만
</a>
<div class="list_netizen_score">
<span class="st_off">
<span class="st_on" style="width:90%">
별점 - 총 10점 중
</span>
</span>
<em>
9
</em>
</div>
<br/>
아빠와 딸이 이보다 황당할 수 없지만 이보다 진실될 수도 없다.
<a class="report" href="#" onclick="report('mari****', 'anE4rA/p6bMHpbuoM1Hmw6yrLc4khPBtw9sfAfbpIr4=',
'아빠와 딸이 이보다 황당할 수 없지만 이보다 진실될 수도 없다.', '17680613', 'point_after');" style="color:#8F8F8F" title="새 창">
신고
</a>
</td>
<td class="num">
<a class="author" href="javascript:find_list('nickname','17680613', 'after');">
mari****
</a>
<br/>
21.08.31
</td>
</tr>
<tr>
<td class="ac num">
17680612
</td>
<td class="title">
<a class="movie color_b" href="?st=mcode&sword=68984&target=after">
미스트
</a>
<div class="list_netizen_score">
<span class="st_off">
<span class="st_on" style="width:20%">
별점 - 총 10점 중
</span>
</span>
<em>
2
</em>
</div>
<br/>
정말 OOO 영화 OOO
<a class="report" href="#" onclick="report('bgyb****', 'B8CEyqxoSBlyAmujLAIWMasYPrFDcOkYQ3DUKbVxqPs=',
'정말 씌레기 영화 쑤레기', '17680612', 'point_after');" style="color:#8F8F8F" title="새 창">
신고
</a>
</td>
<td class="num">
<a class="author" href="javascript:find_list('nickname','17680612', 'after');">
bgyb****
</a>
<br/>
21.08.31
</td>
</tr>
<tr>
<td class="ac num">
17680611
</td>
<td class="title">
<a class="movie color_b" href="?st=mcode&sword=65769&target=after">
그 여자 작사 그 남자 작곡
</a>
<div class="list_netizen_score">
<span class="st_off">
<span class="st_on" style="width:100%">
별점 - 총 10점 중
</span>
</span>
<em>
10
</em>
</div>
<br/>
^^마음이 따뜻해진다 옛날 영화가 왤케 좋지 나는
<a class="report" href="#" onclick="report('tlsg****', 'Mp/z5wfhysUhHT6MOnWZIo2mf5mwuJBaYiCy000XrmQ=',
'^^마음이 따뜻해진다 옛날 영화가 왤케 좋지 나는', '17680611', 'point_after');" style="color:#8F8F8F" title="새 창">
신고
</a>
</td>
<td class="num">
<a class="author" href="javascript:find_list('nickname','17680611', 'after');">
tlsg****
</a>
<br/>
21.08.31
</td>
</tr>
<tr>
<td class="ac num">
17680610
</td>
<td class="title">
<a class="movie color_b" href="?st=mcode&sword=97858&target=after">
월터의 상상은 현실이 된다
</a>
<div class="list_netizen_score">
<span class="st_off">
<span class="st_on" style="width:70%">
별점 - 총 10점 중
</span>
</span>
<em>
7
</em>
</div>
<br/>
소소
<a class="report" href="#" onclick="report('hunt****', 'l3l6UnhovFGERA8eXVsx0UjwNCB0eitedBWMVhxnM2Q=',
'소소', '17680610', 'point_after');" style="color:#8F8F8F" title="새 창">
신고
</a>
</td>
<td class="num">
<a class="author" href="javascript:find_list('nickname','17680610', 'after');">
hunt****
</a>
<br/>
21.08.31
</td>
</tr>
<tr>
<td class="ac num">
17680609
</td>
<td class="title">
<a class="movie color_b" href="?st=mcode&sword=190381&target=after">
내가 죽던 날
</a>
<div class="list_netizen_score">
<span class="st_off">
<span class="st_on" style="width:100%">
별점 - 총 10점 중
</span>
</span>
<em>
10
</em>
</div>
<br/>
마음ㅇㅣ 오랜만에 요동치네요
<a class="report" href="#" onclick="report('yeon****', 'Bj53rpPpxOHYkti5XWfzWE0p3EhoxyQs0JBeT88m/R4=',
'마음ㅇㅣ 오랜만에 요동치네요', '17680609', 'point_after');" style="color:#8F8F8F" title="새 창">
신고
</a>
</td>
<td class="num">
<a class="author" href="javascript:find_list('nickname','17680609', 'after');">
yeon****
</a>
<br/>
21.08.31
</td>
</tr>
<tr>
<td class="ac num">
17680608
</td>
<td class="title">
<a class="movie color_b" href="?st=mcode&sword=188466&target=after">
우리, 둘
</a>
<div class="list_netizen_score">
<span class="st_off">
<span class="st_on" style="width:100%">
별점 - 총 10점 중
</span>
</span>
<em>
10
</em>
</div>
<br/>
두 주인공의 입장이 이해가 되어 안타까웠음마음처럼 따라주지 않는 주변인들과 상황도... 팍팍한 파국 속에서
껴안은 둘은 마침내 처음처럼 행복해보였다. 아직 이해하지 못한 복선이 있는 것 같아 다시 한번 볼 영화.
<a class="report" href="#" onclick="report('ajtw****', 'goFwcuYSJwLUhHCzpcXJtHVUfTZAxLRknhyZS/eA+tQ=',
'두 주인공의 입장이 이해가 되어 안타까웠음마음처럼 따라주지 않는 주변인들과 상황도... 팍팍한 파국 속에서
껴안은 둘은 마침내 처음처럼 행복해보였다. 아직 이해하지 못한 복선이 있는 것 같아 다시 한번 볼 영화.', '17680608', 'point_after');" style="color:#8F8F8F" title="새 창">
신고
</a>
</td>
<td class="num">
<a class="author" href="javascript:find_list('nickname','17680608', 'after');">
ajtw****
</a>
<br/>
21.08.31
</td>
</tr>
<tr>
<td class="ac num">
17680607
</td>
<td class="title">
<a class="movie color_b" href="?st=mcode&sword=193194&target=after">
도굴
</a>
<div class="list_netizen_score">
<span class="st_off">
<span class="st_on" style="width:80%">
별점 - 총 10점 중
</span>
</span>
<em>
8
</em>
</div>
<br/>
임원희님이 안어울리네요 ㅠㅠ너무 발연기 ㅠㅠ캐릭터 있고 잼있는 분 캐스팅 되었음 더 훨씬 영화가 살듯 하
네요…임원희님은 기냥 예능에서 보는걸로.. ㅎ ㅠㅠ
<a class="report" href="#" onclick="report('yuhe****', 'kNyG0v3087jFGCzV9l7LYzjshKz3m0ofkJwYi+e/LMk=',
'임원희님이 안어울리네요 ㅠㅠ너무 발연기 ㅠㅠ캐릭터 있고 잼있는 분 캐스팅 되었음 더 훨씬 영화가 살듯 하네
요…임원희님은 기냥 예능에서 보는걸로.. ㅎ ㅠㅠ', '17680607', 'point_after');" style="color:#8F8F8F" title="새 창">
신고
</a>
</td>
<td class="num">
<a class="author" href="javascript:find_list('nickname','17680607', 'after');">
yuhe****
</a>
<br/>
21.08.31
</td>
</tr>
<tr>
<td class="ac num">
17680606
</td>
<td class="title">
<a class="movie color_b" href="?st=mcode&sword=192150&target=after">
모가디슈
</a>
<div class="list_netizen_score">
<span class="st_off">
<span class="st_on" style="width:100%">
별점 - 총 10점 중
</span>
</span>
<em>
10
</em>
</div>
<br/>
배우들의 연기가 돋보이는 작품
<a class="report" href="#" onclick="report('peac****', 'K8r5jadgZwUY1pnM0Brh96OhgbdP9/P+yH/Mni+dhgg=',
'배우들의 연기가 돋보이는 작품', '17680606', 'point_after');" style="color:#8F8F8F" title="새 창">
신고
</a>
</td>
<td class="num">
<a class="author" href="javascript:find_list('nickname','17680606', 'after');">
peac****
</a>
<br/>
21.08.31
</td>
</tr>
<tr>
<td class="ac num">
17680605
</td>
<td class="title">
<a class="movie color_b" href="?st=mcode&sword=198431&target=after">
몬스터 헌터 - 귀멸의 검
</a>
<div class="list_netizen_score">
<span class="st_off">
<span class="st_on" style="width:20%">
별점 - 총 10점 중
</span>
</span>
<em>
2
</em>
</div>
<br/>
<a class="report" href="#" onclick="report('xogh****', 'U0vV73sh/lNQtHEpkRl0jkKYt3nT8134o/lshTbgikI=',
'', '17680605', 'point_after');" style="color:#8F8F8F" title="새 창">
신고
</a>
</td>
<td class="num">
<a class="author" href="javascript:find_list('nickname','17680605', 'after');">
xogh****
</a>
<br/>
21.08.31
</td>
</tr>
<tr>
<td class="ac num">
17680604
</td>
<td class="title">
<a class="movie color_b" href="?st=mcode&sword=191920&target=after">
더 파더
</a>
<div class="list_netizen_score">
<span class="st_off">
<span class="st_on" style="width:100%">
별점 - 총 10점 중
</span>
</span>
<em>
10
</em>
</div>
<br/>
보는내내 안타깝고 참담한... 한편으로는 경이로운 그런 영화
<a class="report" href="#" onclick="report('rmag****', '4KDyLLzbiEj4RAKebTccnBuZRIB/S0rTYuZdAOEXV4A=',
'보는내내 안타깝고 참담한... 한편으로는 경이로운 그런 영화', '17680604', 'point_after');" style="color:#8F8F8F" title="새 창">
신고
</a>
</td>
<td class="num">
<a class="author" href="javascript:find_list('nickname','17680604', 'after');">
rmag****
</a>
<br/>
21.08.31
</td>
</tr>
</tbody>
C:\Users\nahej\Documents\blockchain_seocho\study3\test>.\bs_test2.py
<tbody>
<tr>
<td class="ac num">
17680613
</td>
<td class="title">
<a class="movie color_b" href="?st=mcode&sword=150371&target=after">
토니 에드만
</a>
<div class="list_netizen_score">
<span class="st_off">
<span class="st_on" style="width:90%">
별점 - 총 10점 중
</span>
</span>
<em>
9
</em>
</div>
<br/>
아빠와 딸이 이보다 황당할 수 없지만 이보다 진실될 수도 없다.
<a class="report" href="#" onclick="report('mari****', 'anE4rA/p6bMHpbuoM1Hmw6yrLc4khPBtw9sfAfbpIr4=',
'아빠와 딸이 이보다 황당할 수 없지만 이보다 진실될 수도 없다.', '17680613', 'point_after');" style="color:#8F8F8F" title="새 창">
신고
</a>
</td>
<td class="num">
<a class="author" href="javascript:find_list('nickname','17680613', 'after');">
mari****
</a>
<br/>
21.08.31
</td>
</tr>
<tr>
<td class="ac num">
17680612
</td>
<td class="title">
<a class="movie color_b" href="?st=mcode&sword=68984&target=after">
미스트
</a>
<div class="list_netizen_score">
<span class="st_off">
<span class="st_on" style="width:20%">
별점 - 총 10점 중
</span>
</span>
<em>
2
</em>
</div>
<br/>
정말 OOO 영화 OOO
<a class="report" href="#" onclick="report('bgyb****', 'B8CEyqxoSBlyAmujLAIWMasYPrFDcOkYQ3DUKbVxqPs=',
'정말 씌레기 영화 쑤레기', '17680612', 'point_after');" style="color:#8F8F8F" title="새 창">
신고
</a>
</td>
<td class="num">
<a class="author" href="javascript:find_list('nickname','17680612', 'after');">
bgyb****
</a>
<br/>
21.08.31
</td>
</tr>
<tr>
<td class="ac num">
17680611
</td>
<td class="title">
<a class="movie color_b" href="?st=mcode&sword=65769&target=after">
그 여자 작사 그 남자 작곡
</a>
<div class="list_netizen_score">
<span class="st_off">
<span class="st_on" style="width:100%">
별점 - 총 10점 중
</span>
</span>
<em>
10
</em>
</div>
<br/>
^^마음이 따뜻해진다 옛날 영화가 왤케 좋지 나는
<a class="report" href="#" onclick="report('tlsg****', 'Mp/z5wfhysUhHT6MOnWZIo2mf5mwuJBaYiCy000XrmQ=',
'^^마음이 따뜻해진다 옛날 영화가 왤케 좋지 나는', '17680611', 'point_after');" style="color:#8F8F8F" title="새 창">
신고
</a>
</td>
<td class="num">
<a class="author" href="javascript:find_list('nickname','17680611', 'after');">
tlsg****
</a>
<br/>
21.08.31
</td>
</tr>
<tr>
<td class="ac num">
17680610
</td>
<td class="title">
<a class="movie color_b" href="?st=mcode&sword=97858&target=after">
월터의 상상은 현실이 된다
</a>
<div class="list_netizen_score">
<span class="st_off">
<span class="st_on" style="width:70%">
별점 - 총 10점 중
</span>
</span>
<em>
7
</em>
</div>
<br/>
소소
<a class="report" href="#" onclick="report('hunt****', 'l3l6UnhovFGERA8eXVsx0UjwNCB0eitedBWMVhxnM2Q=',
'소소', '17680610', 'point_after');" style="color:#8F8F8F" title="새 창">
신고
</a>
</td>
<td class="num">
<a class="author" href="javascript:find_list('nickname','17680610', 'after');">
hunt****
</a>
<br/>
21.08.31
</td>
</tr>
<tr>
<td class="ac num">
17680609
</td>
<td class="title">
<a class="movie color_b" href="?st=mcode&sword=190381&target=after">
내가 죽던 날
</a>
<div class="list_netizen_score">
<span class="st_off">
<span class="st_on" style="width:100%">
별점 - 총 10점 중
</span>
</span>
<em>
10
</em>
</div>
<br/>
마음ㅇㅣ 오랜만에 요동치네요
<a class="report" href="#" onclick="report('yeon****', 'Bj53rpPpxOHYkti5XWfzWE0p3EhoxyQs0JBeT88m/R4=',
'마음ㅇㅣ 오랜만에 요동치네요', '17680609', 'point_after');" style="color:#8F8F8F" title="새 창">
신고
</a>
</td>
<td class="num">
<a class="author" href="javascript:find_list('nickname','17680609', 'after');">
yeon****
</a>
<br/>
21.08.31
</td>
</tr>
<tr>
<td class="ac num">
17680608
</td>
<td class="title">
<a class="movie color_b" href="?st=mcode&sword=188466&target=after">
우리, 둘
</a>
<div class="list_netizen_score">
<span class="st_off">
<span class="st_on" style="width:100%">
별점 - 총 10점 중
</span>
</span>
<em>
10
</em>
</div>
<br/>
두 주인공의 입장이 이해가 되어 안타까웠음마음처럼 따라주지 않는 주변인들과 상황도... 팍팍한 파국 속에서
껴안은 둘은 마침내 처음처럼 행복해보였다. 아직 이해하지 못한 복선이 있는 것 같아 다시 한번 볼 영화.
<a class="report" href="#" onclick="report('ajtw****', 'goFwcuYSJwLUhHCzpcXJtHVUfTZAxLRknhyZS/eA+tQ=',
'두 주인공의 입장이 이해가 되어 안타까웠음마음처럼 따라주지 않는 주변인들과 상황도... 팍팍한 파국 속에서
껴안은 둘은 마침내 처음처럼 행복해보였다. 아직 이해하지 못한 복선이 있는 것 같아 다시 한번 볼 영화.', '17680608', 'point_after');" style="color:#8F8F8F" title="새 창">
신고
</a>
</td>
<td class="num">
<a class="author" href="javascript:find_list('nickname','17680608', 'after');">
ajtw****
</a>
<br/>
21.08.31
</td>
</tr>
<tr>
<td class="ac num">
17680607
</td>
<td class="title">
<a class="movie color_b" href="?st=mcode&sword=193194&target=after">
도굴
</a>
<div class="list_netizen_score">
<span class="st_off">
<span class="st_on" style="width:80%">
별점 - 총 10점 중
</span>
</span>
<em>
8
</em>
</div>
<br/>
임원희님이 안어울리네요 ㅠㅠ너무 발연기 ㅠㅠ캐릭터 있고 잼있는 분 캐스팅 되었음 더 훨씬 영화가 살듯 하
네요…임원희님은 기냥 예능에서 보는걸로.. ㅎ ㅠㅠ
<a class="report" href="#" onclick="report('yuhe****', 'kNyG0v3087jFGCzV9l7LYzjshKz3m0ofkJwYi+e/LMk=',
'임원희님이 안어울리네요 ㅠㅠ너무 발연기 ㅠㅠ캐릭터 있고 잼있는 분 캐스팅 되었음 더 훨씬 영화가 살듯 하네
요…임원희님은 기냥 예능에서 보는걸로.. ㅎ ㅠㅠ', '17680607', 'point_after');" style="color:#8F8F8F" title="새 창">
신고
</a>
</td>
<td class="num">
<a class="author" href="javascript:find_list('nickname','17680607', 'after');">
yuhe****
</a>
<br/>
21.08.31
</td>
</tr>
<tr>
<td class="ac num">
17680606
</td>
<td class="title">
<a class="movie color_b" href="?st=mcode&sword=192150&target=after">
모가디슈
</a>
<div class="list_netizen_score">
<span class="st_off">
<span class="st_on" style="width:100%">
별점 - 총 10점 중
</span>
</span>
<em>
10
</em>
</div>
<br/>
배우들의 연기가 돋보이는 작품
<a class="report" href="#" onclick="report('peac****', 'K8r5jadgZwUY1pnM0Brh96OhgbdP9/P+yH/Mni+dhgg=',
'배우들의 연기가 돋보이는 작품', '17680606', 'point_after');" style="color:#8F8F8F" title="새 창">
신고
</a>
</td>
<td class="num">
<a class="author" href="javascript:find_list('nickname','17680606', 'after');">
peac****
</a>
<br/>
21.08.31
</td>
</tr>
<tr>
<td class="ac num">
17680605
</td>
<td class="title">
<a class="movie color_b" href="?st=mcode&sword=198431&target=after">
몬스터 헌터 - 귀멸의 검
</a>
<div class="list_netizen_score">
<span class="st_off">
<span class="st_on" style="width:20%">
별점 - 총 10점 중
</span>
</span>
<em>
2
</em>
</div>
<br/>
<a class="report" href="#" onclick="report('xogh****', 'U0vV73sh/lNQtHEpkRl0jkKYt3nT8134o/lshTbgikI=',
'', '17680605', 'point_after');" style="color:#8F8F8F" title="새 창">
신고
</a>
</td>
<td class="num">
<a class="author" href="javascript:find_list('nickname','17680605', 'after');">
xogh****
</a>
<br/>
21.08.31
</td>
</tr>
<tr>
<td class="ac num">
17680604
</td>
<td class="title">
<a class="movie color_b" href="?st=mcode&sword=191920&target=after">
더 파더
</a>
<div class="list_netizen_score">
<span class="st_off">
<span class="st_on" style="width:100%">
별점 - 총 10점 중
</span>
</span>
<em>
10
</em>
</div>
<br/>
보는내내 안타깝고 참담한... 한편으로는 경이로운 그런 영화
<a class="report" href="#" onclick="report('rmag****', '4KDyLLzbiEj4RAKebTccnBuZRIB/S0rTYuZdAOEXV4A=',
'보는내내 안타깝고 참담한... 한편으로는 경이로운 그런 영화', '17680604', 'point_after');" style="color:#8F8F8F" title="새 창">
신고
</a>
</td>
<td class="num">
<a class="author" href="javascript:find_list('nickname','17680604', 'after');">
rmag****
</a>
<br/>
21.08.31
</td>
</tr>
</tbody>
> tag = soup.find('a')
> print(tag)
<a class="movie color_b" href="?st=mcode&sword=150371&target=after">토니 에드만</a>
> print(tag.text)
토니 에드만
> tag2 = soup.find_all('a', class_='movie color_b')
for tag2 in tag2:
print(tag1.text)
토니 에드만
미스트
그 여자 작사 그 남자 작곡
월터의 상상은 현실이 된다
내가 죽던 날
우리, 둘
도굴
모가디슈
몬스터 헌터 - 귀멸의 검
더 파더
> print(tag2[1])
<a class="movie color_b" href="?st=mcode&sword=68984&target=after">미스트</a>
> print(tag2[1].text)
미스트
>tag3=soup.select('table > tbody > tr > td.title > a.movie.color_b')
tag4=soup.select('table > tbody > tr > td > a.author ')
for i in range(len(tag4)):
print(tag3[i].text,":",tag4[i].text)
토니 에드만 : mari****
미스트 : bgyb****
그 여자 작사 그 남자 작곡 : tlsg****
월터의 상상은 현실이 된다 : hunt****
내가 죽던 날 : yeon****
우리, 둘 : ajtw****
도굴 : yuhe****
모가디슈 : peac****
몬스터 헌터 - 귀멸의 검 : xogh****
더 파더 : rmag****
> tag3=soup.select('table > tbody > tr > td.title > a.movie.color_b')
tag4=soup.select('table > tbody > tr > td > a.author ')
tag5=soup.find_all('em')
for i in range(10):
tag6=soup.select('table > tbody > tr:nth-child('+str(i)+')')
for review in tag6:
print(review.text)
17680613 토니 에드만 별점 - 총 10점 중9 아빠와 딸이 이보다 황당할 수 없지만 이보다 진실될 수도 없다.
신고 mari****21.08.31
17680612 미스트 별점 - 총 10점 중2 정말 OOO 영화 OOO 신고 bgyb****21.08.31
17680611 그 여자 작사 그 남자 작곡 별점 - 총 10점 중10 ^^마음이 따뜻해진다 옛날 영화가 왤케 좋지 나는
신고 tlsg****21.08.31
17680610 월터의 상상은 현실이 된다 별점 - 총 10점 중7 소소 신고 hunt****21.08.31
17680609 내가 죽던 날 별점 - 총 10점 중10 마음ㅇㅣ 오랜만에 요동치네요 신고 yeon****21.08.31
17680608 우리, 둘 별점 - 총 10점 중10 두 주인공의 입장이 이해가 되어 안타까웠음마음처럼 따라주지 않는
주변인들과 상황도... 팍팍한 파국 속에서 껴안은 둘은 마침내 처음처럼 행복해보였다. 아직 이해하지 못한 복선
이 있는 것 같아 다시 한번 볼 영화. 신고 ajtw****21.08.31
17680607 도굴 별점 - 총 10점 중8 임원희님이 안어울리네요 ㅠㅠ너무 발연기 ㅠㅠ캐릭터 있고 잼있는 분 캐
스팅 되었음 더 훨씬 영화가 살듯 하네요…임원희님은 기냥 예능에서 보는걸로.. ㅎ ㅠㅠ 신고 yuhe****21.08.31
17680606 모가디슈 별점 - 총 10점 중10 배우들의 연기가 돋보이는 작품 신고 peac****21.08.31
17680605 몬스터 헌터 - 귀멸의 검 별점 - 총 10점 중2 신고 xogh****21.08.31
참고 사이트 :
https://www.crummy.com/software/BeautifulSoup/bs4/doc/