Задать вопрос
@ARHAT-99

Как сделать исключения для парсинга?

Сделал исключения для парсера только на ConnectionError да и он плохо работает когда пытаюсь его проверить, просто возвращает пустоту а не текст который я хотел бы видеть.
Да и мне надо сделать исключения на пустоту P.S. когда пользователь ничего не ввел и хотел сделать еще исключение когда на сайте такого продукта нет,
Код где происходит формирование страницы сайта
import requests

url = 'http://www.gadget.kg/catalog/search?q='

class GadgetExtractor:

    def get_product_link(self, name_list: list) -> str: # создаю ссылку поисковика
        full_url = ''
        for arg in name_list:
            full_url += arg
            if arg != name_list[-1]:
                full_url += '+'
        product_link = url + full_url
        return product_link


    def get_html(self, url: str) -> str:
        try:
            res = requests.get(url=url)  # здесь беру html сайта
            res.raise_for_status()
            return res.text
        except requests.HTTPError as error:
            code = error.res.status_code
            print('Ошибка', code)
            exit()
        except ConnectionError:
            print('Плохой интернет')
            exit()

Где происходит парсинг сайта
from bs4 import BeautifulSoup

class GadgetTransform:

    def get_data(self,  html: str) -> list:
        soup = BeautifulSoup(html, 'html.parser')
        if soup.find('div', class_='empty-cart'):
            print(soup.find('div', class_='empty-cart').get_text())
            exit()
        items = soup.find_all('div', class_='hit__slide')
        phone = []
        for item in items:
            price = item.find('span', class_='hit__slide__price')
            if price:
                price = price.get_text()
            else:
                price = ''
            phone = [i for i in phone if i['cost'] != '']
            phone.append({
                'title': item.find("h6", class_='hit__slide__title').get_text(),
                'cost': price,
            })

        return phone

код где происходит вызов всех функций
from sys import argv
from .transform import GadgetTransform
from .extractor import GadgetExtractor


def main():
    gadget_extractor = GadgetExtractor()
    product_link = gadget_extractor.get_product_link(name_list=argv[1:])
    product_page = gadget_extractor.get_html(url=product_link)

    gadget_transform = GadgetTransform()
    detal_of_product = gadget_transform.get_data(html=product_page)
    print(detal_of_product)

if __name__ == '__main__':
    main()
  • Вопрос задан
  • 312 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы