使用Selenium从HTML页面抓取嵌入式JSON数据

使用Selenium从HTML页面抓取嵌入式JSON数据

本教程详细介绍了如何使用Python和Selenium从HTML页面中提取嵌入在标签内的JSON数据。文章将指导您通过定位包含JSON的脚本元素、提取其内部文本、使用Python的json模块解析数据,并最终获取所需信息(如isrc值)的完整过程。此外,教程还将提供示例代码、通用化策略以及在实际应用中需要注意的最佳实践。

1. 理解问题:为什么直接定位元素无效?

在网页抓取任务中,我们经常遇到需要从html页面中提取特定数据的情况。对于那些以“键:值”形式(如”isrc”:”gb-ffm-19-0853″)存在的数据,它们往往不是标准的html元素(如

),而是以json格式嵌入在页面的标签内部。在这种情况下,传统的selenium元素定位方法(如通过id、类名、xpath、css选择器直接查找数据本身)通常会失败,因为这些数据并非独立的dom元素,而是作为javascript代码或数据结构的一部分存在。

要解决这个问题,我们需要改变策略:首先定位包含这些JSON数据的标签,然后提取该标签的文本内容,最后将其解析为Python可操作的数据结构。

2. 核心技术:定位、提取与解析

从HTML页面中抓取嵌入式JSON数据主要分为以下几个步骤:

  1. 使用Selenium加载页面:像往常一样,启动WebDriver并导航到目标URL。
  2. 定位包含JSON的标签:这是关键一步。需要找到页面中存储目标JSON数据的特定标签。这可能需要检查页面源代码以确定其位置或特征(例如,它可能是页面中第一个标签,或者包含某些特定文本)。
  3. 提取标签的内部文本:一旦定位到元素,就可以使用get_attribute(‘innerHTML’)或get_attribute(‘textContent’)方法来获取其包含的字符串内容。
  4. 解析JSON字符串:使用Python内置的json模块将提取到的字符串解析为Python字典或列表。
  5. 访问所需数据:通过字典键或列表索引,导航到JSON结构中您需要的具体数据点。

    3. 示例代码

    以下代码演示了如何从指定网页中提取嵌入在标签内的JSON数据,并获取其中的isrc值。

    from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECimport jsonimport time# 初始化WebDriver# 确保您的ChromeDriver路径正确配置,或者ChromeDriver已添加到系统PATH中driver = webdriver.Chrome()try:    # 导航到目标URL    target_url = "https://www.audionetwork.com/browse/m/track/purple-beat_1008534"    driver.get(target_url)    # 等待页面加载完成,这里可以根据实际情况等待特定的元素出现    # 例如,等待body标签加载,或者等待某个关键元素出现    WebDriverWait(driver, 10).until(        EC.presence_of_element_located((By.TAG_NAME, "body"))    )    # 定位包含JSON数据的<script>标签    # 在本例中,目标JSON位于body内的第一个script标签    # 注意:这个XPath可能因网站结构变化而需要调整    script_element = driver.find_element(By.XPATH, "/html/body/script[1]")    # 提取script标签的innerHTML内容    json_content_str = script_element.get_attribute('innerHTML')    # 将JSON字符串解析为Python字典    content_as_dict = json.loads(json_content_str)    # 根据JSON结构访问所需数据    # 这里的路径 'props' -> 'pageProps' -> 'track' -> 'isrc' 是根据目标网站的JSON结构确定的    isrc_value = content_as_dict['props']['pageProps']['track']['isrc']    print(f"成功提取到 ISRC 值: {isrc_value}")except Exception as e:    print(f"发生错误: {e}")finally:    # 关闭浏览器    driver.quit()

    4. 通用化与注意事项

    为了使上述方法更具通用性并提高其鲁棒性,请考虑以下几点:

    立即学习“前端免费学习笔记(深入)”;

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫

Angular路由重定向与通配符路径配置指南
上一篇 2025年12月22日 18:25:57
CSS Flexbox:实现多文本元素居中与均匀间距布局
下一篇 2025年12月22日 18:26:09

相关推荐

发表回复

登录后才能评论
关注微信