Как скрести все элементы, а не только один? - PullRequest
0 голосов
/ 07 января 2020

Я хотел бы очистить все элементы со страницы (как и все цены) - но появляется только один, хотя len(info) = 100.

Вот мой код:

r=requests.get('https://www.marionnaud.fr/parfum/parfum-femme/c/P0100?q=%3Arank-desc&page=0&pageSize=100')
page=r.content
soup=BeautifulSoup(page)
info=soup.find_all('a',class_='ProductInfoAnchor')


for i in range(len(info)):
    marque=info[i].contents[1].contents
    nom=info[i].contents[3].contents

price=soup.find_all('div',class_="price")
for i in range(len(price)):
    prix=price[i].contents[1].contents[1].contents

Как мне найти решение?

1 Ответ

0 голосов
/ 07 января 2020

К "пара" информация о продукте с ценой, вы можете использовать .find_next() метод.

Например:

import requests
from bs4 import BeautifulSoup

url = 'https://www.marionnaud.fr/parfum/parfum-femme/c/P0100?q=%3Arank-desc&page=0&pageSize=100'

soup = BeautifulSoup( requests.get(url).content, 'html.parser' )

data = []
for product_info in soup.select('.ProductInfoAnchor'):
    brand = product_info.select_one('.brand').get_text(strip=True)
    range_name = product_info.select_one('.range_name').get_text(strip=True)
    product_name = product_info.select_one('.product_name').get_text(strip=True)
    price = product_info.find_next('div', {'class':'price'}).get_text(strip=True, separator=' ')
    data.append((brand, range_name, price, product_name))

# print the data:
print('{:<4} {:<30} {:<30} {:<30} {:<30}'.format('No.', 'Brand', 'Range Name', 'Price', 'Product Name'))
for i, row in enumerate(data, 1):
    print('{:<4} {:<30} {:<30} {:<30} {:<30}'.format(i, *row))

Отпечатки:

No.  Brand                          Range Name                     Price                          Product Name                  
1    DIOR                           J'ADORE                        A partir de 64 €99             Eau de Parfum vaporisateur    
2    Guerlain                       SHALIMAR                       844 €99                        Eau de Parfum Le Flacon aux Abeilles Blanches
3    Guerlain                       LES EAUX                       711 €99                        Eau de Cologne Impériale Le Flacon aux Abeilles Dorées
4    Guerlain                       HEURE BLEUE                    599 €99                        Eau de Toilette Le Flacon aux Abeilles Dorées
5    Guerlain                       L'HEURE BLEUE                  506 €99                        Eau de Toilette               
6    Guerlain                       JARDINS DE BAGATELLE           506 €99                        Eau de Toilette               

...and so on.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...