Python에서 BeautifulSoup를 사용하여 "script"태그의 코드에서 "SNG_TITLE"및 "ART_NAME"값을 추출하고 싶습니다.Python에서 BeautifulSoup를 사용하여 스크립트 태그에서 데이터 추출
<script>window.__DZR_APP_STATE__ = {"TAB":{"loved":{"data":[{"SNG_ID":"126884459","PRODUCT_TRACK_ID":"360276641","UPLOAD_ID":0,"SNG_TITLE":"Heathens","ART_ID":"647650","PROVIDER_ID":"3","ART_NAME":"Twenty One Pilots","ARTISTS":[{"ART_ID":"647650","ROLE_ID":"0","ARTISTS_SONGS_ORDER":"1","ART_NAME":"Twenty One Pilots","ART_PICTURE":"259dcf52853363d79753ec301377645d","SMARTRADIO":"1","RANK":"487762","LOCALES":[],"__TYPE__":"artist"}],"ALB_ID":"13371165","ALB_TITLE":"Heathens","TYPE":0,"MD5_ORIGIN":"5cea723b83af1ff0a62d65d334b978d4","VIDEO":false,"DURATION":"195","ALB_PICTURE":"3dfc8c9e406cf1bba8ce0695a44a9b7e","ART_PICTURE":"259dcf52853363d79753ec301377645d","RANK_SNG":"967143","SMARTRADIO":"1","FILESIZE_AAC_64":0,"FILESIZE_MP3_64":"0","FILESIZE_MP3_128":"3135946","FILESIZE_MP3_256":0,"FILESIZE_MP3_320":"7839868","FILESIZE_FLAC":"21777150","FILESIZE":"3135946","GAIN":"-12","MEDIA_VERSION":"4","DISK_NUMBER":"1","TRACK_NUMBER":"1","VERSION":"","EXPLICIT_LYRICS":"0","RIGHTS":{"STREAM_ADS_AVAILABLE":true,"STREAM_ADS":"2000-01-01","STREAM_SUB_AVAILABLE":true,"STREAM_SUB":"2000-01-01"},"ISRC":"USAT21601930","DATE_ADD":1497886149,"HIERARCHICAL_TITLE":"","SNG_CONTRIBUTORS":{"mainartist":["Twenty One Pilots"],"engineer":["Adam Hawkins"],"mixer":["Adam Hawkins"],"masterer":["Chris Gehringer"],"drums":["Josh Dun"],"producer":["Mike Elizondo","Tyler Joseph"],"programmer":["Mike Elizondo","Tyler Joseph"],"vocals":["Tyler Joseph"],"writer":["Tyler Joseph"]},"LYRICS_ID":30553991,"__TYPE__":"song"},{"SNG_ID":"99976952","PRODUCT_TRACK_ID":"171067651","UPLOAD_ID":0,"SNG_TITLE":"Stressed Out","ART_ID":"647650","PROVIDER_ID":"3","ART_NAME":"Twenty One Pilots","ARTISTS":[{"ART_ID":"647650","ROLE_ID":"0","ARTISTS_SONGS_ORDER":"1","ART_NAME":"Twenty One Pilots", ...</script>
코드의 아이디어는 사용자 이름에서 주어진 페이지에서 볼 수있는 모든 노래와 아티스트 이름을 인쇄하는 것입니다 (전체 스크립트를 붙여 너무 깁니다).
import requests
from bs4 import BeautifulSoup
base_url = 'https://www.deezer.com/en/profile/1589856782/loved'
r = requests.get(base_url)
soup = BeautifulSoup(r.text, 'html.parser')
user_name = soup.find(class_='user-name')
print(user_name.text)
이렇게하면 사용자 이름이 인쇄됩니다.
for script in soup.find_all('script'):
print(script.contents)
제대로 이해하면 필요한 스크립트는 사전이므로 찾기 만하면됩니다. 문제는 정확히 정확히 "스크립트"를 찾는 방법을 모른다는 것입니다. 고유하게 만드는 속성이나 속성이 없습니다. 그래서 나는 페이지의 모든 스크립트를 찾고 그 내용을 인쇄하는 루프를 시도했지만 더 진행하는 방법을 모르겠습니다.
페이지의 특정 "스크립트"만 어떻게 찾을 수 있습니까? 다른 방법으로 값에 액세스 할 수 있습니까?
"window .__ DZR_APP_STATE__"을 (를) 사용하여 스크립트 요소의 압축을 풀려고합니까?코드에서 – RussellB
카운트 스크립트 - 장소를 변경하지 않고 올바른 색인을 얻기 위해 색인을 사용합니다. 세 번째 스크립트'soup.find_all ('script') [2]' – furas
BTW : 스크립트는 일반적인 문자열이므로 표준 문자열 함수를 사용하여 검사 할 수 있습니다. 예를 들어'script.contents :'' – furas