在for循环中处理所有数据,而不是仅处理一个元素

时间:2019-02-04 16:05:15

标签: python python-3.x range

我写了一些代码,以便从网站上抓取一些数据。当我手动运行代码时,可以获得所有鞋子的所有信息,但是当我运行脚本时,每个变量只给我一个结果。

要获得我想要的所有结果,我可以更改什么?

例如,当我运行以下命令时,marque只得到一个结果,而modele却得到一个结果,但是当我在终端中执行此操作时,我看到vignette包含多个值。

import requests
from bs4 import BeautifulSoup

r=requests.get('https://www.sarenza.com/store/product/gender-type/list/view?gender=1&type=76&index=0&count=99')
soup=BeautifulSoup(r.text,'lxml')
vignette=soup.find_all('li',class_='vignette')

for i in range(len(vignette)):
    marque=vignette[i].contents[3].text
    modele=vignette[i].contents[5].contents[3].text

1 个答案:

答案 0 :(得分:1)

您正在更新marquemodele变量,以在循环的每次迭代中覆盖其先前的值。在循环结束时,它们将仅包含分配给它们的最后一个值。

如果要提取所有值,则需要使用两个列表,并按如下所示将值附加到它们:

marques = []
modeles = []
for i in range(len(vignette)):
    marques.append(vignette[i].contents[3].text)
    modeles.append(vignette[i].contents[5].contents[3].text)

或者,以更Python化的方式:

marques = list(v.contents[3].text for v in vignette)
modeles = list(v.contents[5].contents[3].text for v in vignette)

现在,您将拥有所需的所有值,可以像这样处理或打印它们:

for marque, modele in zip(marques, modeles):
    print('Marque:', marque, 'Modèle:', modele)