如何解析一个属性?

Posted

技术标签:

【中文标题】如何解析一个属性?【英文标题】:How to parse an attribute? 【发布时间】:2020-01-18 06:39:19 【问题描述】:

如何从数据值中解析值?

<a href="example.com" data-ref="TopRates" data-type="price" data-value="1212749" data-changescale="1" data-market-id="curr_one" data-symbol="curr_one">curr_one</a>

这里我有一个脚本示例,它正在搜索第一个具有看涨颜色类的跨度,并在屏幕上显示该跨度中的内容。我应该如何从 data-value 中解析一个值并将其显示在上面的示例中的屏幕上?

from bs4 import BeautifulSoup
import requests
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

Options = webdriver.ChromeOptions()
Options.add_argument('--headless')
Options.add_argument('--disable-gpu')
Options.add_argument('--no-sandbox')

url = "http://example.com"
browser = webdriver.Chrome(chrome_options = Options, executable_path="/usr/local/bin/chromedriver")
browser.get(url)

soup = BeautifulSoup(browser.page_source, features="html.parser")
a = soup.find("span", "class": "bullish-color")
print(a.text)

【问题讨论】:

【参考方案1】:

找到元素后,可以通过以下方式获取属性值:

from bs4 import BeautifulSoup

html = '''<a href="example.com" data-ref="TopRates" data-type="price" data-value="1212749" data-changescale="1" data-market-id="curr_one" data-symbol="curr_one">curr_one</a>'''
soup = BeautifulSoup(html, features="html.parser")

print (soup.find('a')['data-value'])

输出:

1212749

【讨论】:

【参考方案2】:

使用更快的 CSS 选择器。

from bs4 import BeautifulSoup
data='''<a href="example.com" data-ref="TopRates" data-type="price" data-value="1212749" data-changescale="1" data-market-id="curr_one" data-symbol="curr_one">curr_one</a>'''
soup=BeautifulSoup(data,'html.parser')
print(soup.select_one('a[data-value]')['data-value']) 

输出

1212749

在你的情况下,这应该有效。

soup = BeautifulSoup(browser.page_source, features="html.parser")
print(soup.select_one('a[data-value]')['data-value'])

【讨论】:

【参考方案3】:

这样做会起作用:

>>> from bs4 import BeautifulSoup
>>> page = '''<a href="http://example.com" data-ref="TopRates" data-type="price" data-value="1212749" data-changescale="1" data-market-id="curr_one" data-symbol="curr_one">curr_one</a>'''
>>> soup = BeautifulSoup(page, features="html.parser")
>>> a = soup.find('a')
>>> a.attrs
'data-changescale': '1', 'data-value': '1212749', 'data-market-id': 'curr_one', 'data-type': 'price', 'href': 'http://example.com', 'data-symbol': 'curr_one', 'data-ref': 'TopRates'
>>> 
>>> a.attrs['data-value']
'1212749'
>>>

【讨论】:

以上是关于如何解析一个属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring Boot 应用程序中另一个属性文件中的值解析属性文件中的占位符

如何在 Spring 中以编程方式解析属性占位符

boost中的属性是如何解析的?肥皂xml解析?

如何在解析之前检查 XML 中是不是存在属性和标签?

我如何通过 XMLPull 解析器获取属性

如何使用多个属性和选项列表解析 XML