【发布时间】:2023-03-18 07:11:01
【问题描述】:
我使用 selenium 编写了一个刮板,其中一部分非常未优化。我在迭代中为变量赋值。我确信有一种方法可以只在一次迭代中完成。我只是不知道怎么做。 这是我正在使用的代码:
params = driver.find_elements_by_class_name('param-label')
values = driver.find_elements_by_class_name('param-value')
i = 0
for param, value in zip(params, values):
if not done:
if param.text == 'Celková cena:':
cena = value.text
if param.text == 'Poznámka k ceně:':
poznamkaCena = value.text
if param.text == 'Aktualizace:':
aktualizace = value.text
if param.text == 'Stavba:':
stavba = value.text
if param.text == 'Stav objektu:':
stavObjektu = value.text
if param.text == 'Vlastnictví:':
vlastnictvi = value.text
if param.text == 'Umístění objektu:':
umisteniObjektu = value.text
if param.text == 'Podlaží:':
podlazi = value.text
if param.text == 'Užitná plocha:':
uzitnaPlocha = value.text
if param.text == 'Sklep:':
sklep = value.text
if param.text == 'Voda:':
voda = value.text
if param.text == 'Plyn:':
plyn = value.text
if param.text == 'Odpad:':
odpad = value.text
if param.text == 'Elektřina:':
elektrina = value.text
if param.text == 'Doprava:':
doprava = value.text
if param.text == 'Energetická náročnost budovy:':
energetickaNarocnost = value.text
i += 1
if i == len(params):
done = True
拜托,你能告诉我如何在一次迭代中做到这一点吗?
【问题讨论】:
-
为什么需要单个变量?你能解释一下你的代码最终做了什么吗?
-
所以你需要检查
param.text == text,然后每次保存到不同的变量? -
(1) 后面的
if可以全部转换成elif。 (2) 无需检查done==True和i+=1,zip默认在较短的列表耗尽时停止迭代。如果您希望zip迭代直到更长的列表耗尽,请使用:stackoverflow.com/a/1277311/6400614 -
你会用字典吗?
{params[i].text : values[i].text for i in range(len(params))} -
代码从真人秀网站获取参数和值。 params 和 values 都是一个列表。然后我使用变量将这些值发送到 sqlite 数据库中。我在页面加载时有这些值,我确信我可以在一次迭代中将它们存储到变量中。我只是不知道如何从列表中引用这些值。