BeautifulSoup, как правильно использовать функцию разложения () [duplicate]

Нет, порядок свойств объектов не гарантируется в JavaScript; вам нужно использовать массив .

Определение объекта из ECMAScript Third Edition (pdf) :

4.3.3 Объект

Объект является членом типа Object. Это неупорядоченный набор свойств, каждый из которых содержит примитивное значение, объект или функцию. Функция, хранящаяся в свойстве объекта, называется методом.

Поскольку ECMAScript 2015, используя , объект Map может быть альтернативой. A Map разделяет некоторые сходства с объектами Object и гарантирует порядок клавиш :

Карта выполняет итерацию своих элементов в порядке ввода, тогда как порядок итерации не задан для объектов.

11
задан Nathan 17 August 2010 в 23:43
поделиться

2 ответа

Я все еще пытаюсь понять, почему он не находит и не разделяет теги: <!-- //-->. Эти обратные косы вызывают упущение некоторых тегов.

Это может быть проблемой с базовым синтаксическим анализатором SGML: см. http://www.crummy.com/software/BeautifulSoup/documentation .html # Дезинфекция% 20Bad% 20Data% 20with% 20Regexps . Вы можете переопределить его, используя регулярное выражение markupMassage - прямо из документов:

import re, copy

myMassage = [(re.compile('<!-([^-])'), lambda match: '<!--' + match.group(1))]
myNewMassage = copy.copy(BeautifulSoup.MARKUP_MASSAGE)
myNewMassage.extend(myMassage)

BeautifulSoup(badString, markupMassage=myNewMassage)
# Foo<!--This comment is malformed.-->Bar<br />Baz
3
ответ дан Katriel 17 August 2018 в 10:49
поделиться
  • 1
    Это сложный вопрос, и это выглядит хорошим способом. Грустно, что он все еще заканчивается использованием регулярного выражения для анализа HTML. Глупые регулярные выражения! – jathanism 18 August 2010 в 00:59
  • 2
    ОК. Я буду работать над re.compile, чтобы обнаружить перепутанные комментарии, которые я перечислил. Нужно освежить мое регулярное выражение. BLECH. – Nathan 18 August 2010 в 01:21
  • 3
    @jathanism - BeautifulSoup использует несколько регулярных выражений внутри, чтобы полировать HTML, прежде чем передать его в sgmllib. Это некрасиво, но это тоже не Лавкрафт. – Katriel 18 August 2010 в 09:37
  • 4
    Чтобы обновить этот старый пост, BeautifulSoup.MARKUP_MASSAGE устарел. Конструктор BeautifulSoup больше не распознает аргумент markupMassage. Теперь ответственность парсера заключается в правильной обработке разметки. & Quot; crummy.com/software/BeautifulSoup/bs4/doc (В самой нижней части страницы) – Timber 30 October 2014 в 14:19

Прямо из документации для BeautifulSoup , вы можете легко скрыть комментарии (или что угодно) с помощью extract():

from BeautifulSoup import BeautifulSoup, Comment
soup = BeautifulSoup("""1<!--The loneliest number-->
                        <a>2<!--Can be as bad as one--><b>3""")
comments = soup.findAll(text=lambda text:isinstance(text, Comment))
[comment.extract() for comment in comments]
print soup
# 1
# <a>2<b>3</b></a>
55
ответ дан jathanism 17 August 2018 в 10:49
поделиться
  • 1
    Я не знаю, почему я этого не видел. Спасибо, что вызвали меня! – Nathan 17 August 2010 в 23:15
  • 2
    Ницца. Но все выглядит нехорошо, чтобы сделать понимание списка с помощью побочных эффектов: p. Как насчет map( lambda x: x.extract(), comments )? – Katriel 17 August 2010 в 23:23
  • 3
    Я все еще пытаюсь понять, почему он не находит и не отделяет теги, подобные этому <!-- //-->. Эти обратные косые черты вызывают упущение некоторых тегов – Nathan 17 August 2010 в 23:26
  • 4
    Что-то изменилось в BeautifulSoup? Я пробовал с 3.2.0, и у него нет проблем с комментариями вроде <!-- //-->. – Kiran Jonnalagadda 9 March 2011 в 10:42
Другие вопросы по тегам:

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