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

2024-09-27 07:24:35 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我可以改变什么来得到我想要的结果

例如,当我运行以下命令时,我只得到一个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

Tags: 数据代码textimport网站typecontents手动
1条回答
网友
1楼 · 发布于 2024-09-27 07:24:35

您正在更新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)

或者,以一种更为恶作剧的方式:

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)

相关问题 更多 >

    热门问题