Очистка результатов очистки для возврата текста привязки, но не HTML - PullRequest
1 голос
/ 02 мая 2019

Я пытаюсь соскрести цены на клюшки с данного URL. В конце концов я также хотел бы получить имена + URL, но я не считаю это необходимым для решения этой проблемы.

Вот что у меня есть:

import requests
from pandas.io.json import json_normalize
from bs4 import BeautifulSoup

url = 'https://www.prohockeylife.com/collections/senior-hockey-sticks'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}

page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')

stick_names = soup.find_all(class_='product-title')
stick_prices = soup.find_all(class_='regular-product')

print(stick_prices)

Приведенный выше код успешно возвращает цены на клюшки, но выглядит это так:

[<p class="regular-product">
<span>$319.99</span>
</p>, <p class="regular-product">
<span>$339.99</span>
</p>, <p class="regular-product">
<span>$319.99</span>

Я бы хотел почистить его и вернуть только фактическую цену.

Я пробовал несколько вещей, в том числе:

dirty_prices = soup.find_all(class_='regular-product')
clean_prices = dirty_prices.get('a')
print(clean_prices)

Но без особого успеха. Указатели приветствуются!

Ответы [ 2 ]

2 голосов
/ 02 мая 2019

Не уверен, но я думаю, что вы можете искать следующее:

Вместо print(stick_prices), используйте:

for name,price in zip(stick_names,stick_prices):   
       print(name["href"],name.text,price.text)

Начало вывода:

    /collections/senior-hockey-sticks/products/ccm-ribcor-trigger-3d-sr-hockey-stick 

        CCM RIBCOR TRIGGER 3D SR HOCKEY STICK     

$319.99

/collections/senior-hockey-sticks/products/bauer-vapor-1x-lite-sr-hockey-stick 

        BAUER VAPOR 1X LITE SR HOCKEY STICK


$339.99

и т. Д.

1 голос
/ 02 мая 2019

Вам необходимо свойство .text, которое вы также можете извлечь во время понимания списка. Затем список / почтовый индекс для списка кортежей имен / цен в конце

import requests
from bs4 import BeautifulSoup

url = 'https://www.prohockeylife.com/collections/senior-hockey-sticks'
headers = {'user-agent': 'Mozilla/5.0'}   
page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')
stick_names = [item.text.strip() for item in soup.find_all(class_='product-title')]
stick_prices = [item.text.strip() for item in soup.find_all(class_='regular-product')]
print(list(zip(stick_names, stick_prices)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...