
* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.
* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.
안녕하세요 질문 드립니다.
3주차 8강에서는 <li>안의 rank number를 가져오기 위해 li.select_one('.rank_num')를 사용합니다.
코드)
for li in lis:
rank=li.select_one('.rank_num').text
과제에서도 동일하게
trs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
for tr in trs:
print(tr.select_one('.title ellipsis').text)
이런 방식으로 해보았는데, 코드가 작동이 되지 않아서 해설 영상을 보니,
여기서는 단순히 .title ellipsis를 적는것이 아닌 copy selector로 selector를 전부 가져와서 앞 부분을 지우고
for tr in trs:
print(tr.select_one('td.info > a.title.ellipsis').text)
이렇게 하면 코드가 작성이 되더군요. 왜 print(tr.select_one('.title ellipsis').text)은 8강에서와 동일한 방식으로 했는데 돌아가지 않나요?
그렇다치면 8강의 코드도, copy selector로 가져와서 앞부분을 지워서 다음과 같이 코드를 적으면
for li in lis:
rank=li.select_one('div > div.thumb_item > div.poster_movie > span.rank_num').text
코드는 길어졌지만 rank=li.select_one('.rank_num').text 와 같은 방식으로 작동이 되는데,
왜 이러한 경우에는 .rank_num 만 적어도 되고, 과제에서는 .title elipsis만 적으면 안되고 copy selector를 사용해야만 하나요?
감사합니다.


1)
from pymongo import MongoClient
client = MongoClient('mongodb+srv://sparta:test@cluster0.rrivuil.mongodb.net/?retryWrites=true&w=majority')
db = client.dbsparta
import requests
from bs4 import BeautifulSoup
URL = "https://movie.daum.net/ranking/reservation"
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)
soup = BeautifulSoup(data.text, 'html.parser')
lis = soup.select('#mainContent > div > div.box_ranking > ol > li')
for li in lis:
rank=li.select_one('.rank_num').text
title=li.select_one('.link_txt').text.strip()
grade=li.select_one('.txt_grade').text.strip()
print(rank, title, grade)
# strip은 앞뒤 공백을 없애줌
# replace(',','')는 comma를 없애줌.
doc = {'title':title,
'rank':rank,
'grade':grade}
db.movies.delete_one({'title':title})
2)
import requests
from bs4 import BeautifulSoup
URL = "https://www.genie.co.kr/chart/top200?ditc=M&rtm=N&ymd=20230101"
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)
soup = BeautifulSoup(data.text, 'html.parser')
trs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
for tr in trs:
print(tr.select_one('.title ellipsis').text)
