使用bs4解析网页时,我试图提取多个值并将其存储在字典中以备后用。
型号
<div class="model-dropdown-block">
<select name="modelpid">
<option value="empty">Select Model</option>
<option value="MODEL1_530"
data-maxavailable="0.0"
data-maxorderqty="10"
data-status="NOT_AVAILABLE">
Jet Fighter </option>
<option value="MODEL2_540"
data-maxavailable="0.0"
data-maxorderqty="10"
data-status="NOT_AVAILABLE">
Jet Fighter2 </option>
鉴于以上已解析的内容,我想提取:
并将它们插入具有多个值的字典键/值对中,以使结果为 Jet Fighter:Model1530,不可用
我需要数据供以后使用,但我愿意提出一种更有效的存储方式供以后检索的建议。
soup = BeautifulSoup(content, "html.parser")
allmodels = soup.findAll('div', {'class':'model-dropdown-block'})
for model in allmodels:
for modelvar in model.findAll('option'):
print(sizevar['value'])
因此,这确实捕获了所有选项值。我需要能够忽略第一个选项(该选项始终为空),然后按所述创建字典。
我不确定我将如何编辑我的for循环以获取更多信息。我尝试过:
for model in allmodels:
for modelvar in model.findAll('option'):
print(sizevar['value'],[data-status])
但这不会产生任何结果,我知道要查找所有选项或数据状态属性,但显然我的理解是错误的!
第一篇文章在这里,所以在此先感谢!
答案 0 :(得分:0)
不知道这是否可以解决问题,因为只有一小段html可以使用。但是设法获得了您想要的输出。
library(quantmod)
tickers = c("AAPL", "MSFT", "GS")
price = getQuote(tickers)
chains = lapply(tickers, getOptionChain, exp = "2019-01-25")
calls = lapply(chains, function(x) x$calls)
##I was thinking to use a function such as
which.min(abs(calls - price))
输出:
import bs4
html = '''<div class="model-dropdown-block">
<select name="modelpid">
<option value="empty">Select Model</option>
<option value="MODEL1_530"
data-maxavailable="0.0"
data-maxorderqty="10"
data-status="NOT_AVAILABLE">
Jet Fighter </option>
<option value="MODEL2_540"
data-maxavailable="0.0"
data-maxorderqty="10"
data-status="NOT_AVAILABLE">
Jet Fighter2 </option>'''
soup = bs4.BeautifulSoup(html, 'html.parser')
allmodels = soup.findAll('div', {'class':'model-dropdown-block'})[0]
models = allmodels.find_all('option')
model_dict = {}
for model in models:
model_key = model.text.strip()
option_value = model.get('value')
data_status = model.get('data-status')
model_dict[model_key] = [option_value, data_status]