`.find('li')` для объекта `bs4.element.Tag` дает None, хотя тег `
  • ` существует внутри супаPython
  • Программы на Python
    Ответить Пред. темаСлед. тема
    Anonymous
     `.find('li')` для объекта `bs4.element.Tag` дает None, хотя тег `
  • ` существует внутри супа

    Сообщение Anonymous »

    Я пытаюсь проанализировать содержимое URL-адреса с помощью beautifulsoup после Requests.get() [не показано в коде]. Используемый парсер — «html.parser». У меня есть следующий фрагмент кода в большом скрипте.

    Код: Выделить всё

    print(f"subheading : {subheading}")
    print(f"type : {type(subheading)}")
    print(f"dir : {dir(subheading)}")
    if subheading.find('ul'):
    print(f"Going for next level subheading search")
    else:
    c2 = subheading.find("li")
    print(f"c2 : {c2}")
    
    Первый оператор печати выдает мне следующее в стандартном выводе:

    Код: Выделить всё

    subheading : [*][url=/handbook/PRIN/1/1.html?date=2022-10-14&timeline=True]PRIN 1.1 Application and purpose[/url]
    
    Я добавил проверку типа и проверку списка атрибутов, просто чтобы убедиться, что я делаю что-то неправильно. Второй и третий операторы печати дают мне следующее:

    Код: Выделить всё

    type : 
    dir : ['DEFAULT_INTERESTING_STRING_TYPES', '__bool__', '__call__', '__class__', '__contains__', '__copy__', '__delattr__', '__delitem__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattr__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', '__unicode__', '__weakref__', '_all_strings', '_find_all', '_find_one', '_is_xml', '_lastRecursiveChild', '_last_descendant', '_should_pretty_print', 'append', 'attrs', 'can_be_empty_element', 'cdata_list_attributes', 'childGenerator', 'children', 'clear', 'contents', 'decode', 'decode_contents', 'decompose', 'decomposed', 'default', 'descendants', 'encode', 'encode_contents', 'extend', 'extract', 'fetchNextSiblings', 'fetchParents', 'fetchPrevious', 'fetchPreviousSiblings', 'find', 'findAll', 'findAllNext', 'findAllPrevious', 'findChild', 'findChildren', 'findNext', 'findNextSibling', 'findNextSiblings', 'findParent', 'findParents', 'findPrevious', 'findPreviousSibling', 'findPreviousSiblings', 'find_all', 'find_all_next', 'find_all_previous', 'find_next', 'find_next_sibling', 'find_next_siblings', 'find_parent', 'find_parents', 'find_previous', 'find_previous_sibling', 'find_previous_siblings', 'format_string', 'formatter_for_name', 'get', 'getText', 'get_attribute_list', 'get_text', 'has_attr', 'has_key', 'hidden', 'index', 'insert', 'insert_after', 'insert_before', 'interesting_string_types', 'isSelfClosing', 'is_empty_element', 'known_xml', 'name', 'namespace', 'next', 'nextGenerator', 'nextSibling', 'nextSiblingGenerator', 'next_element', 'next_elements', 'next_sibling', 'next_siblings', 'parent', 'parentGenerator', 'parents', 'parserClass', 'parser_class', 'prefix', 'preserve_whitespace_tags', 'prettify', 'previous', 'previousGenerator', 'previousSibling', 'previousSiblingGenerator', 'previous_element', 'previous_elements', 'previous_sibling', 'previous_siblings', 'recursiveChildGenerator', 'renderContents', 'replaceWith', 'replaceWithChildren', 'replace_with', 'replace_with_children', 'select', 'select_one', 'setup', 'smooth', 'sourceline', 'sourcepos', 'string', 'strings', 'stripped_strings', 'text', 'unwrap', 'wrap']
    
    Но я не могу успешно выполнить операцию .find('li') внутри части else. c2 всегда NoneType.
    Я тоже пробовал это:

    Код: Выделить всё

    c2 = subheading.a
    
    Но это тоже NoneType.
    Я пробовал

    Код: Выделить всё

    c2 = subheading.find_all("li")
    
    но тогда c2 — это пустой список.
    Моя конечная цель — сначала проверить, существует ли тег li а затем найдите тег и, если он существует, получите доступ к ссылке href и тексту тега .
    ПРИМЕЧАНИЕ. Я попытался воссоздать то же самое в терминале, который дал правильный тег li. Я попытался сохранить подзаголовок в строке h, а затем выполнить bs(h, 'html.parser'), на котором .find('li') работает, но пока запуская скрипт, он дает мне NoneType. Однако типы этих двух объектов различны. Один из сценариев — , а воссозданный в терминале – . Противоречит ли другой тип объекта каким-либо образом доступу к атрибуту или чему-то подобному?
    Почему .find('li') или другие процессы не выдают мне тип или не работают, даже если тег существует? Что я делаю не так?

    Подробнее здесь: https://stackoverflow.com/questions/741 ... i-tag-exis
  • Реклама
    Ответить Пред. темаСлед. тема

    Быстрый ответ

    Изменение регистра текста: 
    Смайлики
    :) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
    Ещё смайлики…
       
    К этому ответу прикреплено по крайней мере одно вложение.

    Если вы не хотите добавлять вложения, оставьте поля пустыми.

    Максимально разрешённый размер вложения: 15 МБ.

    • Похожие темы
      Ответы
      Просмотры
      Последнее сообщение

    Вернуться в «Python»