我想使用beautifulsoup和python从变量meta返回“ id”值。这可能吗?另外,我不知道如何找到包含meta变量的某些“脚本”标签,因为它没有唯一的标识符,以及网站上的许多其他“脚本”标签。我也使用硒,所以我可以理解任何答案。
<script>
var meta = "variants":[{"id":12443604615241,"price":14000},
{"id":12443604648009,"price":14000}]
</script>
答案 0 :(得分:1)
您可以使用内置的re
和json
模块来提取Javascript变量:
from bs4 import BeautifulSoup
import re
import json
from pprint import pprint
data = '''
<html>
<body>
<script>
var meta = "variants":[{"id":12443604615241,"price":14000},
{"id":12443604648009,"price":14000}]
</script>
</body>
'''
soup = BeautifulSoup(data, 'lxml')
json_string = re.search(r'meta\s*=\s*(.*?}])\s*\n', str(soup.find('script')), flags=re.DOTALL)
json_data = json.loads('{' + json_string[1] + '}')
pprint(json_data)
此打印:
{'variants': [{'id': 12443604615241, 'price': 14000},
{'id': 12443604648009, 'price': 14000}]}
答案 1 :(得分:0)
如果您使用的是硒,则无需解析html以获取js变量,只需使用硒webdriver.execute_script()
即可将其获取到python:
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('https://whatever.com/')
meta = driver.execute_script('return meta')
就这样,meta现在拥有js变量,并且保持其类型