#javascript #python #web-scraping #beautifulsoup
Вопрос:
URL: https://www.nike.com/w/sale-3yaep
С веб — сайтом выше я пытаюсь очистить URL-адрес всех продуктов. BeautifulSoup будет извлекать только изображения продуктов по умолчанию. Если продукт имеет несколько цветов, следовательно, несколько URL-адресов продукта, я не смогу получить информацию об этом URL-адресе.
См., например, ниже: верхнее изображение является изображением по умолчанию для этого продукта. Наведя курсор на изображение, вы можете увидеть разные цвета. Если вы затем наведете курсор на другой цвет, URL-адрес изменится. Это та информация, которую мне нужно извлечь.
Ответ №1:
На самом деле данные также генерируются из ответов json на вызовы api. Вот рабочий пример:
Код:
import requests
import pandas as pd
import json
params = {
"queryid": "products",
"anonymousId": "1073AB4A1C5F8BFD37D3302DFF7210E5",
"country": "us",
"endpoint": "/product_feed/rollup_threads/v2?filter=marketplace(US)amp;filter=language(en)amp;filter=employeePrice(true)amp;filter=attributeIds(5b21a62a-0503-400c-8336-3ccfbff2a684)amp;anchor=24amp;consumerChannelId=d9a5bc42-4b9c-4976-858a-f159cf99c647amp;count=24",
"language": "en",
"localizedRangeStr": "{lowestPrice} — {highestPrice}"
}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36'}
data=[]
url= 'https://api.nike.com/cic/browse/v1'
r = requests.get(url, params=params,headers = headers)
for item in r.json()['data']['products']['products']:
data.append([
item['title'],
item['subtitle'],
item['colorDescription'],
item['images']['portraitURL'],
item['colorways'][0]['images']['portraitURL'],
item['colorways'][0]['images']['squarishURL']
])
cols=['Product_title','Product_subtitle','Product_color','Images-01','colorways-01','colorways-02']
df = pd.DataFrame(data, columns=cols)
print(df)
#df.to_csv('info.csv',index = False)
Выход:
Product_title ... colorways-02
0 Kyrie Flytrap 4 ... https://static.nike.com/a/images/t_default/33c...
1 Nike ... https://static.nike.com/a/images/t_default/a8c...
2 Nike Sportswear Club Fleece ... https://static.nike.com/a/images/t_default/e77...
3 Nike Sportswear ... https://static.nike.com/a/images/t_default/bcc...
4 Nike Dri-FIT One ... https://static.nike.com/a/images/t_default/02b...
5 Nike React Miler 2 ... https://static.nike.com/a/images/t_default/261...
6 Nike Pegasus Trail 2 ... https://static.nike.com/a/images/t_default/517...
7 Nike TechKnit Ultra ... https://static.nike.com/a/images/t_default/d6f...
8 Nike Fast ... https://static.nike.com/a/images/t_default/c10...
9 Nike Air Max Infinity ... https://static.nike.com/a/images/t_default/d85...
10 Nike Free X Metcon 2 ... https://static.nike.com/a/images/t_default/wo6...
11 Nike Dri-FIT Indy Rainbow Ladder ... https://static.nike.com/a/images/t_default/085...
12 Nike One Rainbow Ladder ... https://static.nike.com/a/images/t_default/662...
13 Nike Revolution 5 ... https://static.nike.com/a/images/t_default/a9d...
14 Nike Revolution 5 ... https://static.nike.com/a/images/t_default/50b...
15 Nike Sportswear ... https://static.nike.com/a/images/t_default/258...
16 Nike Dri-FIT Trophy ... https://static.nike.com/a/images/t_default/w1o...
17 Jordan ... https://static.nike.com/a/images/t_default/ca9...
18 Nike Dri-FIT Tempo ... https://static.nike.com/a/images/t_default/26e...
19 LeBron Soldier 14 ... https://static.nike.com/a/images/t_default/3a1...
20 KD Trey 5 VIII ... https://static.nike.com/a/images/t_default/i1-...
21 Nike Sportswear Windrunner Tech Pack ... https://static.nike.com/a/images/t_default/i1-...
22 USA Nike Therma Flex Showtime ... https://static.nike.com/a/images/t_default/7e1...
23 Nike Blazer Low '77 ... https://static.nike.com/a/images/t_default/b97...
[24 rows x 6 columns]
Комментарии:
1. Спасибо. Я пытаюсь это проверить, и у меня есть вопрос-где в приведенном выше сценарии указано на страницу продаж? (т. Е. мой указанный выше URL nike.com/w/sale-3yaep ) …. Я хочу подтвердить, что это подтягивает правильные продукты
Ответ №2:
URL первого звонка
import requests
headers={"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"}
res=requests.get("https://www.nike.com/in/t/kyrie-flytrap-3-ep-basketball-shoe-0qb5vw/CD0191-103",headers=headers)
Второе использование
bs4
для поиска элементов
from bs4 import BeautifulSoup
soup=BeautifulSoup(res.text,"html.parser")
Третье : вы можете найти вручную из супа только URL-адрес, и он даст вам
a
тег с классомВ котором я использовал селектор css с ним, и после обхода его мы можем извлечь
href
main_data=soup.select("a.colorway-product-overlay")
for i in main_data:
print(i['href'])
Выход:
https://www.nike.com/in/t/kyrie-flytrap-3-ep-basketball-shoe-0qb5vw/CD0191-104
https://www.nike.com/in/t/kyrie-flytrap-3-ep-basketball-shoe-0qb5vw/CD0191-103
https://www.nike.com/in/t/kyrie-flytrap-3-ep-basketball-shoe-0qb5vw/CD0191-006
https://www.nike.com/in/t/kyrie-flytrap-3-ep-basketball-shoe-0qb5vw/CD0191-100
https://www.nike.com/in/t/kyrie-flytrap-3-ep-basketball-shoe-0qb5vw/CD0191-009
Комментарии:
1. спасибо, но мне это нужно для каждого продукта/цвета на главной странице, которую я предоставил.. не только для отдельного обувного изделия на картинке.