如何通过Selenium和BeautifulSoup提取get_attribute_list指定字段值
解决方案:提取Position、Brand和Price字段值
看起来你已经通过BeautifulSoup拿到了包含电商数据的JSON字符串,接下来只需要把这个JSON字符串解析成Python字典,就能轻松提取你要的字段了。下面结合Selenium和BeautifulSoup给出完整的实现方案:
完整代码示例(结合Selenium动态加载页面)
from selenium import webdriver from bs4 import BeautifulSoup import json # 初始化Chrome浏览器(确保已安装对应版本的chromedriver) driver = webdriver.Chrome() # 访问目标页面 driver.get("你的目标页面URL") # 获取页面源码并交给BeautifulSoup解析 page_source = driver.page_source soup = BeautifulSoup(page_source, 'html.parser') # 定位目标div元素 target_div = soup.find('div', {'id': 'comparisonTabs1'}) # 获取包含JSON数据的属性值 json_str_list = target_div.get_attribute_list('data-js-gtminfo') # 解析JSON并提取字段 if json_str_list: # 将JSON字符串转换为Python字典 data_dict = json.loads(json_str_list[0]) # 逐层定位到第一个产品数据 product = data_dict['Ecommerce']['Detail']['Products'][0] # 提取需要的字段 position = product['Position'] brand = product['Brand'] price = product['Price'] # 输出结果 print(f"Position: {position}") print(f"Brand: {brand}") print(f"Price: {price}") # 关闭浏览器 driver.quit()
关键步骤解释
- Selenium加载页面:如果目标页面是动态渲染的,用Selenium可以确保获取到完整的页面源码,这比requests更适合处理这类场景。
- 解析JSON数据:
get_attribute_list返回的是一个包含JSON字符串的列表,我们先取出第一个元素,再用json.loads()把它转换成Python字典,这样就能通过键名直接访问对应的值。 - 字段提取:从字典里逐层导航到
Products列表的第一个元素,然后直接提取Position、Brand和Price字段即可。
如果你已经拿到了JSON字符串(简化版)
如果你的现有代码已经成功获取到comparisonTabs1数据,也可以跳过Selenium部分,直接解析JSON:
import json # 假设这是你已获取到的comparisonTabs1数据 comparisonTabs1 = ['{"Event":"productDetail","EventCategory":"Ecommerce","EventAction":"Product detail","EventLabel":"","Ecommerce":{"Detail":{"ActionField":{"List":"consument/vergelijker"},"Products":[{"Id":3211,"Name":"1 jaar Vast","Price":1600.45,"Brand":"Google","Position":1,"Category":"consument","Variant":"","List":"consument/vergelijker","Dimension10":222.0,"Dimension11":12,"Dimension12":"nee","Dimension13":6.9}]}}}'] if comparisonTabs1: data_dict = json.loads(comparisonTabs1[0]) product = data_dict['Ecommerce']['Detail']['Products'][0] print(f"Position: {product['Position']}") print(f"Brand: {product['Brand']}") print(f"Price: {product['Price']}")
内容的提问来源于stack exchange,提问作者Michel Oosterman
相关产品推荐
相关产品推荐

