【发布时间】:2015-11-14 01:51:13
【问题描述】:
我正在抓取一个网站,以便将数据存储在具有 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 可能是裤子。
【问题讨论】:
-
我能问一下为什么你要这样做吗?相反,只需将
find_all的结果分配给一个列表,然后您就可以使用列表内的对象。 -
我正在尝试建立一个数据库。数据库最终将有三列,因为这部分代码最多可以有三个值,我想将它们全部捕获。在某些时候,我必须将该字段设置为空白,所以我试图找出一种巧妙的方法来做到这一点,而不是蛮力 if...elif... 方法。有时我可能会遇到 > 3 个我想捕获的字段,并且在这种情况下我也希望有一种更顺畅的方式来完成。
-
好的,您可以全部捕获它们,并且仍然使用其他逻辑来控制它们如何/何时写入您的数据库。如果可以的话,我会在下面写一些答案以提供帮助。
标签: python list variable-assignment