подскажите по BeautifulSoup

Тема в разделе "Perl, Python, Ruby", создана пользователем zhekaxak, 10 июн 2017.

Метки:
  1. zhekaxak

    zhekaxak

    Регистр.:
    16 авг 2007
    Сообщения:
    340
    Симпатии:
    75
    Только начал учить питон и решил попробовать написать парсер сайта с использованием BeautifulSoup
    Застрял на нескольких моментах и никак не могу понять как сделать

    Пытаюсь спарсить хлебные крошки
    Код:
    data['path'] = viewPage.select("#path > a")
    результат:
    Код:
    path': [<a href="./">Главная</a>, <a href="catalog/">Каталог</a>, <a href="catalog/category">Категория</a>, <a href="catalog/subcategory/">Подкатегория</a>]
    все отлично, они берутся, но как получить не полностью тег a, а только текст?
    в такой конструкции работает
    Код:
    data['name'] = viewPage.find('h1').text
    дописываю также к хлебным крошкам
    Код:
    data['path'] = viewPage.select("#path > a").text
    выдает ошибку: builtins.AttributeError: 'list' object has no attribute 'text'

    И второй момент, как не брать определенные теги
    Допустим нужно описание
    Код:
    data['desc'] = viewPage.select("#description")
    Но внутри decription есть много лишнего (img, form, table), как от них избавится?

    Спасибо!
     
  2. zhekaxak

    zhekaxak

    Регистр.:
    16 авг 2007
    Сообщения:
    340
    Симпатии:
    75
    с первой задачей разобрался так:
    Код:
        for bread in viewPage.select("#path > a"):
            data['path'] += bread.text + "/"
    а вот со второй пока ничего :(
     
  3. savvadesogle

    savvadesogle Создатель

    Регистр.:
    19 мар 2014
    Сообщения:
    22
    Симпатии:
    6
    Как один из вариантов сделать списком содержимое и взять только те теги, которые нужны.
     
  4. savvadesogle

    savvadesogle Создатель

    Регистр.:
    19 мар 2014
    Сообщения:
    22
    Симпатии:
    6
  5. mvvalerievich

    mvvalerievich Писатель

    Регистр.:
    19 дек 2016
    Сообщения:
    1
    Симпатии:
    0
    Здравствуйте. Тоже проблема с BeautifulSoup....
    Код:
    table = soup.find('div', class_='cols_table')
    Проблема в том, что на странице 2 дива с похожими классами и выдёргивается первый (не нужный мне) class="wrapper cols_table no_hover"
    Как конкретизировать?..
     
  6. eTorres

    eTorres Писатель

    Регистр.:
    17 ноя 2018
    Сообщения:
    2
    Симпатии:
    0
    Искать не по классу, которых может быть много, а по xpath. В нем уже собирать уточненный путь для выборки нужного вам элемента. Приведите примеры html-блоков. Без них точнее сложно сказать
     
  7. nsd_net

    nsd_net Создатель

    Регистр.:
    12 июл 2009
    Сообщения:
    29
    Симпатии:
    7
    и использовать не beautifulsoup а lxml, он быстрее
     
  8. ak100

    ak100 Создатель

    Регистр.:
    14 сен 2011
    Сообщения:
    48
    Симпатии:
    12
    Как вариант, можно сделать так
    Код:
    table = soup.find_all('div', class_='cols_table')[1]
    Вариант не идеальный конечно.. Но имеет место быть