<p>您需要使用<code>attr=value</code>或<code>attrs={'attr': 'value'}</code>语法指定属性。在</p>
<p><a href="https://www.crummy.com/software/BeautifulSoup/bs4/doc/#the-keyword-arguments" rel="nofollow noreferrer">https://www.crummy.com/software/BeautifulSoup/bs4/doc/#the-keyword-arguments</a></p>
<pre class="lang-py prettyprint-override"><code>import json
import re
from ast import literal_eval
from bs4 import BeautifulSoup
if __name__ == '__main__':
html = '''
<script type="text/javascript">
var spConfig=newApex.Config({
"attributes": {
"199": {
"id": "199",
"code": "legend",
"label": "Weapons",
"options": [
{ "label": "10", "priceInGame": "0", "id": [] },
{ "label": "10.5", "priceInGame": "0", "id": [] },
{ "label": "11", "priceInGame": "0", "id": [ "66659" ] },
{ "label": "7.5", "priceInGame": "0", "id": [] },
{ "label": "8", "priceInGame": "0", "id": ["66672"] }
]
}
},
"weaponID": "66733",
"chooseText": "Apex Legends",
"taxConfig": {
"includeCoins": False,
}
});
</script>
'''
soup = BeautifulSoup(html, 'html.parser')
# this one works too
# script = soup.find('script', attrs={'type':'text/javascript'})
script = soup.find('script', type='text/javascript')
js: str = script.text.replace('\n', '')
raw_json = re.search('var spConfig=newApex.Config\(({.*})\);', js, flags=re.MULTILINE).group(1)
# if `"includeCoins": False,` weren't in the JSON,
# you could have used json.loads() but it fails here.
# Yet, ast.literal_eval works fine.
data = literal_eval(raw_json)
labels = [opt['label'] for opt in data['attributes']['199']['options']]
print(labels)
</code></pre>
<p>输出:</p>
^{pr2}$