@ARHAT-99

Как мне избавиться от лишнего в выводе парсера?

Вопрос такой:
Сделав парсер поисковика на сайт, необходимо брать только телефоны которые соответствуют названию товара, остальные товары такие как зубные щетки, телефоны которые не соответствуют выводу поисковика и часы и т.д. Не нужны в выводе
Сам код вот:
import requests
from bs4 import BeautifulSoup

def get_html(full_url):
    res = requests.get(full_url)
    return res.text

def get_data(html):
    soup = BeautifulSoup(html, 'lxml')
    items = soup.find_all('div', class_='hit__slide')
    phone = []
    for item in items:

        link_is_true = item.find('h6', class_='hit__slide__title') # нахожу тег в котором находиться ссылка
        if link_is_true is not 'catalog/telefony/':
            link_is_true = link_is_true.find('a').get('href')

        price = item.find('span', class_='hit__slide__price')
        if price:
            price = price.get_text()
        else:
            price = ''

        name = item.find("h6", class_='hit__slide__title')
        phone = [i for i in phone if i['cost'] != '']
        phone.append({
            'title': name,
            'cost': price,
            'link': HOST + link_is_true,
        })

    return phone


while True:
    search_name = input('Название телефона: ')
    url = 'http://www.gadget.kg/catalog/search?q='
    full_url = (url + search_name.replace(' ', '+'))
    HOST = 'http://www.gadget.kg'
    html = get_html(full_url)
    print(get_data(html))

Его Ввод и вывод:
Введите название телефона: Samsung
[{'title': 'Мобильный Телефон Xiaomi Redmi Note 8 (6+128Gb) Global IND', 'cost': '13.000 сом', 'link': 'www.gadget.kg/catalog/telefony/xiaomi/3337'}, {'title': 'Мобильный Телефон Xiaomi Mi 9 (6+64Gb) EU Global', 'cost': '20.600 сом', 'link': 'www.gadget.kg/catalog/telefony/xiaomi/3143'}, {'title': 'Мобильный Телефон Xiaomi Mi Note 10 (6+128Gb) EU', 'cost': '30.000 сом', 'link': 'www.gadget.kg/catalog/telefony/xiaomi/3130'}, {'title': 'Планшет Samsung Galaxy Tab A 10.1 T510 4G LTE (2+32GB)', 'cost': '15.700 сом', 'link': 'www.gadget.kg/catalog/telefony/planshety/2820'}, {'title': 'Смарт Часы Samsung Galaxy Watch Active R500', 'cost': '10.700 сом', 'link': 'www.gadget.kg/catalog/gadzhety/smart-chasy-braslet...'}, {'title': 'Мобильный Телефон Xiaomi Redmi Note 8 (4+128Gb) EU', 'cost': '12.900 сом', 'link': 'www.gadget.kg/catalog/telefony/xiaomi/2796'}, {'title': 'Смарт Часы женские Bakeey H8', 'cost': '1.800 сом', 'link': 'www.gadget.kg/catalog/gadzhety/smart-chasy-braslet...'}, {'title': 'Смарт-часы Samsung Galaxy Watch R800 46mm', 'cost': '15.000 сом', 'link': 'www.gadget.kg/catalog/gadzhety/smart-chasy-braslet...'}, {'title': 'Смарт-часы Samsung Galaxy Watch R810 42mm', 'cost': '14.700 сом', 'link': 'www.gadget.kg/catalog/gadzhety/smart-chasy-braslet...'}, {'title': 'Планшет Samsung Galaxy Tab E 9.6" 3G T561 (1+8)', 'cost': '10.400 сом', 'link': 'www.gadget.kg/catalog/telefony/planshety/2757'}, {'title': 'Планшет Samsung Galaxy Tab A 8.0 T295 (2+32GB)', 'cost': '10.900 сом', 'link': 'www.gadget.kg/catalog/telefony/planshety/2756'}, {'title': 'Мобильный Телефон Xiaomi Redmi Note 7 (6+64Gb)', 'cost': '10.400 сом', 'link': 'www.gadget.kg/catalog/telefony/xiaomi/2719'}]
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
deepblack
@deepblack Куратор тега Python
Пример
import json

input_json = """
[
   {
      "title":"Мобильный Телефон Xiaomi Redmi Note 8 (6+128Gb) Global IND",
      "cost":"13.000 сом",
      "link":"www.gadget.kg/catalog/telefony/xiaomi/3337"
   },
   {
      "title":"Смарт Часы женские Bakeey H8",
      "cost":"1.800 сом",
      "link":"www.gadget.kg/catalog/gadzhety/smart-chasy-braslet..."
   },
   {
      "title":"Смарт-часы Samsung Galaxy Watch R800 46mm",
      "cost":"15.000 сом",
      "link":"www.gadget.kg/catalog/gadzhety/smart-chasy-braslet..."
   },
   {
      "title":"Смарт-часы Samsung Galaxy Watch R810 42mm",
      "cost":"14.700 сом",
      "link":"www.gadget.kg/catalog/gadzhety/smart-chasy-braslet..."
   }
]
"""

input_dict = json.loads(input_json)
search_term = 'samsung'
output_dict = [x for x in input_dict if search_term in x['title'].lower()]
output_json = json.dumps(output_dict, indent=4, sort_keys=True, ensure_ascii=False)
print(output_json)


Результат
[
    {
        "cost": "15.000 сом",
        "link": "www.gadget.kg/catalog/gadzhety/smart-chasy-braslet...",
        "title": "Смарт-часы Samsung Galaxy Watch R800 46mm"
    },
    {
        "cost": "14.700 сом",
        "link": "www.gadget.kg/catalog/gadzhety/smart-chasy-braslet...",
        "title": "Смарт-часы Samsung Galaxy Watch R810 42mm"
    }
]
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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