繁体   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