Обработка всех данных в цикле for вместо одного элемента - PullRequest
0 голосов
/ 04 февраля 2019

Я написал некоторый код, чтобы очистить некоторые данные с веб-сайта.Когда я запускаю код вручную, я могу получить всю информацию для всех ботинок, но когда я запускаю свой скрипт, он дает мне только один результат для каждой переменной.

Что я могу изменить, чтобы получить все результаты, которые я хочу?

Например, когда я запускаю следующее, я получаю только один результат для 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 голосов
/ 04 февраля 2019

Вы обновляете переменные marque и modele, перезаписывая их предыдущее значение на каждой итерации цикла.В конце цикла они будут содержать только последние значения, которые были им назначены.

Если вы хотите извлечь все значения, вам нужно использовать два списка и добавлять значения к ним следующим образом:

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

Или, более Pythonic:

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)
...