не могу извлечь текст из контейнера сохранения цены в процентах с newegg.com - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь получить сберегательную цену от newegg.com, но пока не могу разделить или извлечь текст

, пока у меня есть

save_percent = container.findAll('span', {'class': 'price-save-percent'})

, что дает мне

[<span class="price-save-percent">8%</span>]

мне нужно только 8%. До сих пор я пытался преобразовать вывод в список и проиндексировать его, но он не был сохранен правильно или так, как мне нужно. Я пытался преобразовать его в строку и использовать замену и перевод для удаления символов, но по какой-то причине ничего не сделал. Я застрял на том, что попробовать дальше, любая помощь будет высоко ценится.

РЕДАКТИРОВАТЬ.

import bs4 
from urllib.request import urlopen as urlo
from bs4 import BeautifulSoup as soup
page = '1'
count = 0
my_url = 'https://www.newegg.com/Desktop-Graphics-Cards/SubCategory/ID-48/Page-'+ page +'?Tid=7709'

    #opening connection
uClient = urlo(my_url)
page_html = uClient.read()
uClient.close()

page_soup = soup(page_html, "html.parser")
    # Grabs Graphics card products contianers
containers = page_soup.findAll("div", {"class":"item-container"})

filename = 'graphics_cards.csv'
f = open(filename, "w")
headers = "brand, product_name, shipping, price\n"
f.write(headers)

for container in containers:
    item_brand = container.findAll("a", {"class": "item-brand"})    
    brand = item_brand[0].img["title"]

    title_container = container.findAll("a", {"class": "item-title"})
    product_name = title_container[0].text


    shipping_container = container.findAll("li", {"class": "price-ship"})
    shipping = shipping_container[0].text.strip()

    price_container = container.findAll("li", {"class", "price-current"})
    price_list = price_container[0].text.split()
    price = price_list[0]

    save_percent = container.findAll('span', {'class': 'price-save-percent'})
    percent_saved = save_percent
    psave = percent_saved[0].text

    print("brand " + brand)
    print("product name " + product_name)
    print("shipping " + shipping)
    print('price' + price)
    print('percent_saved' + psave)

    f.write(brand + ',' + product_name.replace(',', '|') + ',' + shipping + ',' + psave + ',"' + price + '"\n')

1 Ответ

0 голосов
/ 17 марта 2020

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

все, что я делал, это добавлял оператор if для учета этого

вот мое решение

save_percent = container.findAll('span', {'class': 'price-save-percent'})
    percent_saved = save_percent

try:
    psave = percent_saved[0].text
except IndexError:
    psave = 'null'
if psave == '':
   psave = 'null'

теперь, если работает так, как должно. надеюсь, это поможет кому-то там

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...