在学习Python BeautifulSoup时,为什么我必须在For循环中使用两个元素?
我正在用BS练习一些web抓取,我已经设法用For循环提取我想要的信息,并进行枚举,但出于某种原因,我必须在For循环中使用两个元素,因为如果不使用,它就不起作用 让我详细说明一下,首先,我选择具有我想要的信息的标签,并将它们存储到BS对象中,在这种情况下,标签是:在学习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") 但是“
<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,多亏了这两个元素!