在学习Python BeautifulSoup时,为什么我必须在For循环中使用两个元素?

在学习Python BeautifulSoup时,为什么我必须在For循环中使用两个元素?,python,for-loop,object,beautifulsoup,new-operator,Python,For Loop,Object,Beautifulsoup,New Operator,我正在用BS练习一些web抓取,我已经设法用For循环提取我想要的信息,并进行枚举,但出于某种原因,我必须在For循环中使用两个元素,因为如果不使用,它就不起作用 让我详细说明一下,首先,我选择具有我想要的信息的标签,并将它们存储到BS对象中,在这种情况下,标签是: <code>"Some text im interested in"</code> 所以我就这样选了 tags = soup.select("code") 但是“

我正在用BS练习一些web抓取,我已经设法用For循环提取我想要的信息,并进行枚举,但出于某种原因,我必须在For循环中使用两个元素,因为如果不使用,它就不起作用

让我详细说明一下,首先,我选择具有我想要的信息的标签,并将它们存储到BS对象中,在这种情况下,标签是:

 <code>"Some text im interested in"</code>
所以我就这样选了

tags = soup.select("code")
但是“tags”是一个不漂亮的BS对象,它包含整个字符串和标记,因此我对它使用getText()方法,如下所示:

tags[1].getText()
这允许我提取标记BS对象的第一个条目的字符串。 为了能够以我想要的方式提取整个信息,我实现了一个For循环枚举和迭代BS对象,并将结果附加到一个列表中,让我向您展示我的函数:

def my_function(bs_object):
   new_list = []
   for i in enumerate(bs_object):
       data_entry = bs_object[i].getText()
       new_list.append(data_entry)
   return new_list
但由于某种原因,上述功能不起作用,通过研究我发现,如果我这样做,它会起作用:

def my_function(bs_object):
   new_list = []
   for i, item in enumerate(bs_object):
       data_entry = bs_object[i].getText()
       new_list.append(data_entry)
   return new_list
我想知道这是为什么?“item”第二个元素在For循环中做什么?
或者也许我没有用最好的方式进行刮水?我应该使用另一种方法吗?

使用枚举函数,您不仅可以迭代对象本身,还可以获得索引

colors = ["green", "blue", "red"]
不带枚举

for c in colors:
    print(c) 
输出:

green
blue
red
green
0
blue
1
red
2
但是使用enumerate您现在还可以获得索引! 这有时很有用

for i, c in enumerate(colors):
    print(c) 
    print(i) 
输出:

green
blue
red
green
0
blue
1
red
2

因此,如果不需要索引,则不需要使用enumerate。

enumerate函数旨在返回两个值:一个索引和列表中该索引位置的值。由于循环不需要值,因此可以使用
代替枚举,用于范围内的i(len(bs_对象))
实际上,根本不需要索引。您可以简单地对bs\u对象中的项使用:
:data\u entry=item.getText()
,这更像python。感谢您的详细演示!我现在明白了,因为我使用了enumerate方法,所以我需要两个元素,但正如@RufusVS提到的,为了我想要的,我根本不需要使用enumerate,多亏了这两个元素!