Проверка запасов каждого размера для определенного c продукта с использованием запросов и BS4 - PullRequest
0 голосов
/ 16 февраля 2020

Итак, вот мой код для проверки запаса размеров 7.5-9 определенного продукта:

import requests
from bs4 import BeautifulSoup
r = requests.get('https://www.jimmyjazz.com/mens/footwear/adidas-solar-hu-nmd/BB9528') 
soup = BeautifulSoup(r.text, 'html.parser')
attrs = soup.find_all(class_="box_wrapper")[0].findChildren()

output = str(attrs[0].attrs)
if "piunavailable" in output:
    print("Size 7.5 OOS")
else:
    print("Size 7.5 in stock!")

output = str(attrs[1].attrs)
if "piunavailable" in output:
    print("Size 8 OOS")
else:
    print("Size 8 in stock!")

output = str(attrs[2].attrs)
if "piunavailable" in output:
    print("Size 8.5 OOS")
else:
    print("Size 8.5 in stock!")

output = str(attrs[3].attrs)
if "piunavailable" in output:
    print("Size 9 OOS")
else:
    print("Size 9 in stock!")

Фактические значения htmls для размеров на этом веб-сайте:

<div class="box_wrapper">
     <a href="#" id="itemcode_11468285" class="box">7.5</a>
     <a id="itemcode_11468286" class="box piunavailable">8</a>
     <a id="itemcode_11468287" class="box piunavailable">8.5</a>
     <a id="itemcode_11468288" class="box piunavailable">9</a>
     <a id="itemcode_11468289" class="box piunavailable">9.5</a>
     <a id="itemcode_11468290" class="box piunavailable">10</a>
     <a id="itemcode_11468291" class="box piunavailable">10.5</a>
     <a id="itemcode_11468292" class="box piunavailable">11</a>
     <a id="itemcode_11468293" class="box piunavailable">11.5</a>
     <a id="itemcode_11468294" class="box piunavailable">12</a>
     <a id="itemcode_11468295" class="box piunavailable">13</a>
     <a id="itemcode_11468296" class="box piunavailable">14</a>
</div>

Поэтому, когда я запускаю свой код, как и ожидалось, я получаю:

PS C:\Users\jokzc\Desktop\python\learning requests> py test3.py
Size 7.5 in stock!
Size 8 OOS
Size 8.5 OOS
Size 9 OOS

Что я хотел бы сделать, это иметь возможность проверить каждый размер и вернуться, если он есть в наличии или нет в наличии без 10 различные блоки вывода в моем основном коде. Есть ли какая-нибудь вечная функция или что-то, что я мог бы сделать, чтобы удовлетворить эту потребность?

1 Ответ

1 голос
/ 16 февраля 2020

Да, вы можете сделать это следующим образом.

import requests
from bs4 import BeautifulSoup

r = requests.get('https://www.jimmyjazz.com/mens/footwear/adidas-solar-hu-nmd/BB9528')
soup = BeautifulSoup(r.text, 'html.parser')
for anchor_tag in soup.find_all(class_="box_wrapper")[0].findChildren():
    if "piunavailable" in anchor_tag['class']:
        print(f"Size {anchor_tag.text} OOS")
    else:
        print(f"Size {anchor_tag.text}  in stock!")

Выходы:

Size 7.5  in stock!
Size 8 OOS
Size 8.5 OOS
Size 9 OOS
Size 9.5 OOS
Size 10 OOS
Size 10.5 OOS
Size 11 OOS
Size 11.5 OOS
Size 12 OOS
Size 13 OOS
Size 14 OOS

Вы также можете использовать for anchor_tag in soup.select('div.box_wrapper a'): вместо for anchor_tag in soup.find_all(class_="box_wrapper")[0].findChildren():

...