Beautifulsoup не может очистить элемент

#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-адрес