Эта страница использует JavaScript
для установки отключенных элементов, но requests
/ BeautifulSoup
не может работать JavaScript
. Вам может понадобиться Selenium для управления веб-браузером, который может работать JavaScript
.
ИЛИ вы можете попытаться получить URL, который JavaScript
(AJAX
/ XHR
) использует для получения данных с сервера.
Но эта страница не использует AJAX/XHR
для загрузить информацию. В HTML я вижу скрипт с
var offerItems = [...]
, который, вероятно, содержит всю информацию
Этот скрипт получает все 6-е <script>
и обрезает 4-ю строку с var offerItems =
( Я нашел этот код проверки позиции вручную)
Затем он обрезает только текст с данными в [ ]
и использует модуль json
, чтобы преобразовать его в Python 'список / словарь.
Позже он может легко получить значения из этого списка / словаря.
Он содержит только информацию Size
и Quantity
, поэтому вам придется добавить код, который вычисляет, какие размеры отсутствуют, чтобы они можно отключить Я пропустил эту часть - я даже не пытался вычислить ее.
Кстати: некоторый код, который я написал в несколько строк, чтобы сделать его более читабельным, но вы можете написать его в одну строку.
import requests
from bs4 import BeautifulSoup
import json
response = requests.get("https://sport.woot.com/offers/asics-mens-clearance-calculator?ref=w_cnt_lnd_cat_sprt_18_1")
soup = BeautifulSoup(response.content, 'lxml')
all_scripts = soup.find_all('script')
#for i, item in enumerate(all_scripts):
# print('---', i, '---')
# print(item.text[:200])
text = all_scripts[5].text
lines = text.split('\n')
line = lines[3].strip()
line = line[len("var offerItems = "):-1]
data = json.loads(line)
#sizes = ["6.5", "8", "8.5", "9.5", "10", "10.5", "11", "12", "13", "14", "12 Wide US", "13 (4E)"]
print(data[0].keys())
for item in data:
print('------------------------------------')
print('Key:', item['Key'])
print('Quantity:', item['Quantity'])
for x in item['Attributes']:
print('> ', x['Key'], ':', x['Value'])
#for key, value in item.items():
# print('>', key, ':', value)
Результат:
dict_keys(['Id', 'Asin', 'AmazonPrice', 'Attributes', 'FormattedDiscount', 'FormattedListPrice', 'FormattedSalePrice', 'FormattedWarrantyPrice', 'Key', 'ListPrice', 'Quantity', 'SalePrice', 'SKU', 'TotalReviews', 'WarrantyPrice', 'WarrantyTerm', 'WarrantyUrl'])
------------------------------------
Key: 6.5|Gel-Nimbus 19 - Black/Onyx/Silver
Quantity: 10
> Size : 6.5
> Model : Gel-Nimbus 19 - Black/Onyx/Silver
------------------------------------
Key: 8|Gel-Excite 4 - Silver/Black/Imperial
Quantity: 6
> Size : 8
> Model : Gel-Excite 4 - Silver/Black/Imperial
------------------------------------
Key: 8|GT-2000 7 - Illusion Blue/Black
Quantity: 5
> Size : 8
> Model : GT-2000 7 - Illusion Blue/Black
------------------------------------
Key: 8|GT-2000 6 - Everglade/ Black
Quantity: 10
> Size : 8
> Model : GT-2000 6 - Everglade/ Black
------------------------------------
Key: 8.5|Frequent Trail - Black/ Birch
Quantity: 0
> Size : 8.5
> Model : Frequent Trail - Black/ Birch
------------------------------------
Key: 8.5|GT-2000 7 - Illusion Blue/Black
Quantity: 0
> Size : 8.5
> Model : GT-2000 7 - Illusion Blue/Black
------------------------------------
Key: 9.5|Gel-Venture 6 - Frost Grey/ Phantom/ Black
Quantity: 0
> Size : 9.5
> Model : Gel-Venture 6 - Frost Grey/ Phantom/ Black
------------------------------------
Key: 9.5|GT-2000 7 - Illusion Blue/Black
Quantity: 3
> Size : 9.5
> Model : GT-2000 7 - Illusion Blue/Black
------------------------------------
Key: 9.5|Gel-Nimbus 20 - Island Blue/White/Black
Quantity: 10
> Size : 9.5
> Model : Gel-Nimbus 20 - Island Blue/White/Black
------------------------------------
Key: 10|GT-2000 6 - Everglade/ Black
Quantity: 4
> Size : 10
> Model : GT-2000 6 - Everglade/ Black
------------------------------------
Key: 9.5|GT-2000 7 - Black/White
Quantity: 0
> Size : 9.5
> Model : GT-2000 7 - Black/White
------------------------------------
Key: 9.5|GT-2000 6 - Dark Grey/Black/Fiery Red
Quantity: 9
> Size : 9.5
> Model : GT-2000 6 - Dark Grey/Black/Fiery Red
------------------------------------
Key: 10|GT-2000 8 - Piedmont Grey/Black
Quantity: 3
> Size : 10
> Model : GT-2000 8 - Piedmont Grey/Black
------------------------------------
Key: 10|Gel-Contend 4 - Carbon/ Classic Red/ Black
Quantity: 6
> Size : 10
> Model : Gel-Contend 4 - Carbon/ Classic Red/ Black
------------------------------------
Key: 10.5|Gel-Excite 4 - Silver/Black/Imperial
Quantity: 10
> Size : 10.5
> Model : Gel-Excite 4 - Silver/Black/Imperial
------------------------------------
Key: 10.5|Gel-Excite 4 - Carbon/ Silver/ Black
Quantity: 0
> Size : 10.5
> Model : Gel-Excite 4 - Carbon/ Silver/ Black
------------------------------------
Key: 10.5|Gel-Nimbus 21 - Black/Classic Red
Quantity: 1
> Size : 10.5
> Model : Gel-Nimbus 21 - Black/Classic Red
------------------------------------
Key: 11|Gel-Nimbus 20 - Island Blue/White/Black
Quantity: 5
> Size : 11
> Model : Gel-Nimbus 20 - Island Blue/White/Black
------------------------------------
Key: 12|Gel-Nimbus 19 - Glacier Grey/Silver/White
Quantity: 0
> Size : 12
> Model : Gel-Nimbus 19 - Glacier Grey/Silver/White
------------------------------------
Key: 13|GT-1000 7 - Grand Shark/ Peacoat
Quantity: 0
> Size : 13
> Model : GT-1000 7 - Grand Shark/ Peacoat
------------------------------------
Key: 14|Gel-Cumulus 20 - Race Blue/ Peacoat
Quantity: 1
> Size : 14
> Model : Gel-Cumulus 20 - Race Blue/ Peacoat
------------------------------------
Key: 14|Gel-Nimbus 20 - Indigo blue/fiery red
Quantity: 0
> Size : 14
> Model : Gel-Nimbus 20 - Indigo blue/fiery red
------------------------------------
Key: 12 Wide US|Gel-Nimbus 20 - Black/White/Carbon
Quantity: 3
> Size : 12 Wide US
> Model : Gel-Nimbus 20 - Black/White/Carbon
------------------------------------
Key: Gel-Venture 6 - Frost Grey/ Phantom/ Black|13 (4E)
Quantity: 0
> Model : Gel-Venture 6 - Frost Grey/ Phantom/ Black
> Size : 13 (4E)