gpt4 book ai didi

python - Python中未知长度列表的变量赋值

转载 作者:太空宇宙 更新时间:2023-11-04 08:52:30 25 4
gpt4 key购买 nike

我正在抓取一个网站,以便将数据存储在具有 3 列的数据库中。我正在抓取的网站部分看起来像下面三个示例之一

# Example 1:
<div>
<a href="sample1">text1</a>
</div>

# Example 2:
<div>
<a href="sample1">text1</a>
<a href="sample2">text2</a>
</div>

# Example 3:
<div>
<a href="sample1">text1</a>
<a href="sample2">text2</a>
<a href="sample3">text3</a>
</div>

我正在尝试分配

  • “text1”到 var1,
  • 空字符串或“text2”到 var2,
  • 空字符串或“text3”到 var3。

执行此操作的最佳方法是什么?

我试过的一些东西是

### FIRST ATTEMPT
var1, var2, var3 = '','',''
# could also do var1, var2, var3 = ('',)*3
all = soup.find_all('a')

var1 = all[0].text

try:
var2 = all[1].text
except:
pass

try:
var3 = all[3].text
except:
pass

#### SECOND ATTEMPT
all = [s.text for s in soup.find_all('a')]
# This is where i get stuck... This could return a list of length 1, 2, or 3, and I need the output to be a list of length 3 so i can use the following line to assign variables
var1, var2, var3 = all

#### THIRD ATTEMPT
all = [s.text for s in soup.find_all('a')]
var1, var2, var3 = '','',''
n = len(all)
var1 = all[0].text
if n = 2:
var2 = all[1].text
else:
var2 = all[1].text
var3 = all[2].text

编辑:我试图在我的数据库中包含三个字段的原因是因为我希望能够按这些不同的变量中的每一个进行过滤。 var1 是最准确的标签,var2 稍微准确一些,var3 的准确度很高。把它想象成衣服……var1 可以是灰色休闲裤,var2 可以是商务休闲裤,var3 可以是裤子。

最佳答案

您的第二次尝试可能更像 pythonic。当然,您事先并不知道 .find_all 的结果是否是一个长度 ==3(或更多,或更少)的列表。因此,您应该使用 try/except 或其他逻辑来控制将结果写入数据库的方式/时间。

# create a dictionary of your database column names:
dbColumns = {0:'column1', 1:'column2', 2:'column3'}

# get all the results; there might be 0 or 3 or any number really,
# we'll deal with that later
results = [s.text if s.text else "" for s in soup.find_all('a')]

# iterate the items in the list, and put in corresponding DB
for col in range(len(results)):
# use the dbColumns dict to insert to the desired column

query = "Insert INTO [db_name].[" + dbColumns[col] + "]"
query += "VALUES '" + results[i] + '"

"""
db.insert(query) # assumes a db object that has an "insert" function; modify as needed
"""

这种方法的要点是,这个问题似乎没有什么技术上需要硬编码恰好三个对象(var1、var2、var3)并尝试分配给这些对象。相反,只需返回 find_all 的结果并按结果列表中的索引处理它们。

关于python - Python中未知长度列表的变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33704299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com