커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
3주차 8강, 과제 질문
undefined주차
북마크
김*곤
댓글
5
추천
0
조회수
17
조회수
17
답변 완료

* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.

* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.


안녕하세요 질문 드립니다.

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)



   





취소
 공유
취소
댓글 0
댓글 알림
나의얼굴