スパルタネットワーク開発総合クラス第3週-課題
11078 ワード
簡体字音楽
ランキング/曲名/歌手をスクリプト化して出力するコードを書きます.
# rank = soup.select_one('#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.number')
# artist = soup.select_one('#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.artist.ellipsis')
# title = soup.select_one('#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.title.ellipsis')
songs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
#tr 까지는 내가 가져오려는 정보의 경로가
#일치하므로 이렇게 선언을 해놓고 사용하면 편리하다.
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
import certifi
ca = certifi.where()
client = MongoClient('mongodb+srv://test:[email protected]/Cluster0?retryWrites=true&w=majority', tlsCAFile=ca )
db = client.dbsparta
#유저가 부른 것처럼 하기 위한 header 속성
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://www.genie.co.kr/chart/top200?ditc=M&rtm=N&ymd=20210701',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
# rank = soup.select_one('#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.number')
# artist = soup.select_one('#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.artist.ellipsis')
# title = soup.select_one('#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.title.ellipsis')
songs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
for song in songs:
ranks = song.select_one('td.number')
artists = song.select_one('td.info > a.artist.ellipsis')
titles = song.select_one('td.info > a.title.ellipsis')
if ranks is not None:
rank = ranks.text[0:2].strip()
title = titles.text.strip()
artist = artists.text
print(rank,title,artist)
title = song.select_one('td.info > a.title.ellipsis').text.strip()
そうすると、結果はよさそうですが、問題があります.真ん中にこんな大きな空白ができたので、Genie音楽サイトに入って調べてみましたが、
この項目のタイトルには19禁のラベルが貼られており、出力中に空白ができた.
strip([Cars]):Stringの左側と右側からパラメータとして渡される文字を削除します.
lstrip([Cars]):Stringの左側からパラメータとして渡される文字を削除します.
rstrip([Cars]):Stringの右側からパラメータとして渡される文字を削除します.
これらの情報を参考にして練習を行い,上記の情報の結果であれば,出力された値は削除された値に違いないと考えた.
text = ' Water boils at 100 degrees'
tests = text.strip('Water')
print(tests)
拭き取れない.
ただしWater左側の空白を除いて運転
水がふき取られた.
※stilip([Chars])この文字列の外部にスペースがないと正常に動作しません.
さて再び課題に戻りますが、出力するtitle値にstrip()が適用されているので、外部空白はありません.そこで、「19禁lstrip("19禁")を外した後、さらに19禁という言葉を加えてstrip()で空白を取り除きます」.
for song in songs:
ranks = song.select_one('td.number')
artists = song.select_one('td.info > a.artist.ellipsis')
titles = song.select_one('td.info > a.title.ellipsis')
if ranks is not None:
rank = ranks.text[0:2].strip()
title = titles.text.strip()
if '19금' in title:
title = "19금" + title.lstrip('19금').strip()
# 19금 단어를 제거하고, 19금 단어를 추가한뒤 공백제거
artist = artists.text
print(rank,title,artist)
正常に動作する.
タスクの実行中に変数が発生したが,解決策を見つける意味がある.ユーザが見るページを実現し,サーバとdb,Webスクリプトによるデータ取得も習得した.両方使えるようになるまで勉強して、Webサービスを簡単に構築できる実力になるべきだと思います.
Reference
この問題について(スパルタネットワーク開発総合クラス第3週-課題), 我々は、より多くの情報をここで見つけました https://velog.io/@jhs000123/스파르타-웹개발-종합반-3주차-과제テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol