簡體   English   中英

如何從 HTML 頁面源中抓取 JSON 數據?

[英]How can I scrape JSON data from a HTML page source?

我正在嘗試從在線音樂數據庫中提取一些數據。 特別是,我想提取您可以使用 CTRL+F 找到的這些數據——“isrc”:“GB-FFM-19-0853”。

查看源代碼:https ://www.audionetwork.com/browse/m/track/purple-beat_1008534

我正在使用 Python 和 Selenium,並嘗試通過標簽、xpath 和 id 等方式定位數據,但似乎沒有任何效果。

我以前沒有見過這種 x:y 格式,一些搜索讓我覺得它是 JSON 格式。

有沒有辦法通過 Selenium 獲取 isrc 數據? 我需要通用的方法(即適用於具有不同 isrc 值的頁面,因為每個音樂曲目都有不同的)。

到目前為止我的代碼...

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from time import sleep
import os

# Access AudioNetwork and search for tracks.

path = "C:\Program Files (x86)\chromedriver.exe"

driver = webdriver.Chrome(path)

driver.get("https://www.audionetwork.com/track/searchkeyword")

search = driver.find_element(By.ID, "js-keyword")
search.send_keys("ANW3175_001_Purple-Beat.wav")
search.send_keys(Keys.RETURN)
sleep(5)

music_link = driver.find_element(By.CSS_SELECTOR, "a.track__title")

music_link.click()

我知道我需要更好地等待/可能是代碼的其他問題,但是關於如何獲取該 ISRC 號碼的任何想法?

是的,這是 JSON 格式。 它實際上是包裹在 HTML 腳本標簽內的 JSON。 它本質上是一個“鍵”:“值”對-因此您概述的特定內容(“isrc”:“GB-FFM-19-08534”)具有 isrc 鍵,值為 GB-FFM-19-08534 .

Python 有一個解析 JSON 的庫,我想你可能想要這個 - https://www.w3schools.com/python/gloss_python_json_parse.asp 讓我知道這是否適合你。

如果你想找到 isrc 的值,你可以這樣做:

import json

... # your code here

jsonString = json.loads(someValueHere)
isrcValue = jsonString["isrc"]

用您正在解析的 json 字符串替換 someValueHere,這應該會有所幫助。 我認為 isrc 是嵌套的,所以它可能不是那么簡單。 我不認為你可以在 python 中只做 jsonString["track.isrc"],但我不確定......你正在尋找的路徑是 props.pageProps.track.isrc。 您可能必須為每層分配一個變量...

jsonString = json.loads(someValueHere)
propsValue = jsonString["props"]
pagePropsValue = propsValue["pageProps"]
trackValue = pagePropsValue["track"]
isrcValue = trackValue["isrc"]

您想將整個腳本提取為 JSON 數據(可以在 python 中作為字典讀取)並搜索“isrc”參數。

以下代碼使用 selenium 來提取頁面內的腳本內容,將其解析為 json 並將“isrc”值打印到終端。

from selenium import webdriver
from selenium.webdriver.common.by import By
import json

driver = webdriver.Chrome()
driver.get("https://www.audionetwork.com/browse/m/track/purple-beat_1008534")

search = driver.find_element(By.XPATH, "/html/body/script[1]")
content = search.get_attribute('innerHTML')

content_as_dict = json.loads(content)

print(content_as_dict['props']['pageProps']['track']['isrc'])

driver.close()
driver.quit()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM