#python #web-scraping #beautifulsoup
#python #веб-очистка #beautifulsoup
Вопрос:
Привет, я попытался очистить следующий сайт: https://www.footlocker.co.uk/en/all/new /
Я хочу очистить цену и «href» следующего элемента:
<span class=" fl-price--sale ">
<meta itemprop="priceCurrency" content="GBP">
<meta itemprop="price" content="84.99"><span>£ 84,99</span>
</span>
и это (href):
<a href="https://www.footlocker.co.uk/en/p/adidas-performance-don-issue-2-men-shoes-92815?v=314102617504#!searchCategory=all" data-product-click-link="314102617504" data-hash-key="searchCategory" data-hash-url="https://www.footlocker.co.uk/en/p/adidas-performance-don-issue-2-men-shoes-92815?v=314102617504" data-testid="fl-product-details-link-314102617504">
Я пробовал этот код:
import urllib.request
import bs4 as bs
from bs4 import BeautifulSoup
import requests
proxies = {'type':'ip:port'}
r= requests.get('https://www.footlocker.de/de/alle/new/', proxies=proxies)
soup = BeautifulSoup(r.content,'html.parser')
# It doesn't find it...
for a in (soup.find_all('a')):
try:
if a['href'] == 'https://www.footlocker.co.uk/en/p/adidas-performance-don-issue-2-men-shoes-92815?v=314102617504#!searchCategory=all':
print(a['href'])
except:
pass
# It don't find it...
for price in (soup.find_all('span', class_=' fl-price--sale ')):
print(price.text)
Я пытался очистить с помощью прокси, но он отказывается очищать элемент (я думаю, что HTML неверен)
Спасибо за ваши советы 🙂 (Только для образовательных предложений)
Комментарии:
1. Вы уверены
' fl-price--sale '
, что в начале и конце должны быть пробелы?2. Да, у меня есть проверка без пробелов, вы можете проверить по ссылке.
3. Кроме того,
requests.get()
не обрабатывает javascript. Если на странице есть javascript, который динамически создает элемент, который вы ищете, тоrequests
он не будет работать для вас.4. и что я должен сделать для очистки динамических элементов javascript?
5. Вам нужно будет использовать что-то, что работает как настоящий браузер, например, Selenium.
Ответ №1:
Чтобы получить названия, ссылки и цены на продукты, вы можете использовать этот пример:
import requests
from bs4 import BeautifulSoup
url = 'https://www.footlocker.co.uk/INTERSHOP/web/FLE/Footlocker-Footlocker_GB-Site/en_GB/-/GBP/ViewStandardCatalog-ProductPagingAjax?SearchParameter=____amp;sale=newamp;MultiCategoryPathAssignment=allamp;PageNumber={}'
for page in range(3): # <--- increase the number of pages here
print('Page {}...'.format(page))
data = requests.get(url.format(page)).json()
soup = BeautifulSoup(data['content'], 'html.parser')
for d in soup.select('[data-request]'):
s = BeautifulSoup(requests.get(d['data-request']).json()['content'], 'html.parser')
print(s.select_one('[itemprop="name"]').text)
print(s.select_one('[itemprop="price"]')['content'], s.select_one('[itemprop="priceCurrency"]')['content'])
print(s.a['href'])
print('-' * 80)
С принтами:
Page 0...
adidas Performance Don Issue 2 - Men Shoes
84.99 GBP
https://www.footlocker.co.uk/en/p/adidas-performance-don-issue-2-men-shoes-92815?v=314102617504
--------------------------------------------------------------------------------
Nike Air Force 1 Crater - Women Shoes
94.99 GBP
https://www.footlocker.co.uk/en/p/nike-air-force-1-crater-women-shoes-98071?v=315349054502
--------------------------------------------------------------------------------
Jordan Jumpmcn Cl Iii Camo - Baby Tracksuits
39.99 GBP
https://www.footlocker.co.uk/en/p/jordan-jumpmcn-cl-iii-camo-baby-tracksuits-91611?v=318280390044
--------------------------------------------------------------------------------
Jordan 13 Retro - Grade School Shoes
99.99 GBP
https://www.footlocker.co.uk/en/p/jordan-13-retro-grade-school-shoes-952?v=316701533404
--------------------------------------------------------------------------------
...and so on.
Комментарии:
1. ТЫ ЛУЧШИЙ
2. Но где вы нашли URL-адрес?
3. @MatteoBianchi Если вы
Load More
нажмете, вы увидите в Chrome / Firefox инструменты разработчика (вкладка Сеть) URL-адрес