Цена комплектации выпуска от webscrape Python - PullRequest
1 голос
/ 12 марта 2020

Следуя инструкциям, но все еще не могу выбрать цену на веб-сайте - я хочу выбрать название продукта и цену продукта.

Я могу выбрать имя =, которое появляется в консоли. Цена возвращается "нет". Пожалуйста, не введите ошибку, я не знаю, где я иду не так.

page = requests.get('https://www.wickes.co.uk/search?text=brick')
soup = BeautifulSoup(page.content, 'html.parser')
all_bricks = soup.find(class_='products-list products-list-v2')

items = all_bricks.find(class_='card product-card')
items_name = all_bricks.find(class_='product-card__title product-card__title-v2')

price_box = items.find("div", attrs={"class": "product-card__price-value "})
price = price_box
print (price)

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Ну, у вас есть две проблемы:

  1. Вы добавляете дополнительное место в имени класса. BeautifulSoup предназначен для обрезки лишних пробелов в html DOM.
  2. Вы не использовали .text для возврата цены.
from bs4 import BeautifulSoup
import requests

page = requests.get('https://www.wickes.co.uk/search?text=brick')
soup = BeautifulSoup(page.content, 'html.parser')
all_bricks = soup.find(class_='products-list products-list-v2')

items = all_bricks.find(class_='card product-card')
items_name = all_bricks.find(class_='product-card__title product-card__title-v2')

price_box = items.find("div", attrs={"class": "product-card__price-value"}) #Extra space removed
price = price_box.text #adding ".text"
print (price)
0 голосов
/ 12 марта 2020

Чтобы получить все имена и цены, вы можете просто искать их напрямую.

page = requests.get('https://www.wickes.co.uk/search?text=brick')
soup = BeautifulSoup(page.content, 'lxml')
names = [x.text.strip() for x in soup.find_all('a', {'class': 'product-card__title product-card__title-v2'})]
prices = [x.text.strip() for x in soup.find_all('div', {'class': 'product-card__price-value '})]
print(names[0], prices[0])
...