Какие параметры у self._search_regex?

youtube-dl имеет в своем ДОПОЛНИТЕЛЬНАЯ документация

description = self._search_regex(
    r'<span[^>]+id = "title"[^>]*>([^<]+)<',
    webpage, 'description', fatal=False)

Какие параметры у _search_regex? В документации не указано, что такое 'description'? Это атрибут HTML?

FWIW фактическое определение функции можно найти здесь: github.com/rg3/youtube-dl/blob/master/youtube_dl/extractor/…

alkasm 24.07.2018 00:30

Так это просто название сообщения об ошибке? @AlexanderReynolds

Evan Carroll 24.07.2018 00:37
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
377
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как внутренняя функция (начинается с подчеркивания), она плохо документирована, но вы можете найти его определение в исходном коде.

_search_regex - это служебная функция, которая в основном вызывает re.search, но унифицирует обработку в случае, если регулярное выражение не совпадает. Это важно, поскольку многие экстракторы используют регулярные выражения, и было бы утомительно (не говоря уже о большом дублировании кода) реплицировать обработку ошибок повсюду.

Вот его параметры:

  • pattern: ищется регулярное выражение. Например, что-то вроде r'(?:foo|href)\s*=\s*(http://[^"]*)". Обычно первая захваченная группа (т.е. материал в скобках, но не начинающийся с ?:. Для получения дополнительной информации о регулярных выражениях обратитесь к Документация стандартной библиотеки Python.
  • string: строка для поиска (например, стог сена), загруженная из службы, к которой вы подключаетесь.
  • name: Имя, которое вы выбрали; это предоставляется пользователю, если что-то не удается. Должен быть уникальным для вашего экстрактора. Примерами являются 'manifest URL' или 'content section'. Таким образом, вы сразу узнаете, в чем проблема, если пользователь отправит сообщение об ошибке без трассировки стека.
  • default=NO_DEFAULT: значение по умолчанию. Иногда используется значение по умолчанию, если регулярное выражение не совпадает. Если да, то передайте его сюда.
  • fatal=True: Если значение по умолчанию не указано, это определяет поведение, если регулярное выражение не соответствует. True: прервать извлечение и выдать подробную ошибку; например, если не удается извлечь URL-адрес видео. False: Только пропустите предупреждение и продолжайте; если поиск необязательного поля (например, описания) не удался.
  • flags=0 - Явные флаги регулярного выражения. Редко используемый; см. Документация стандартной библиотеки Python для получения дополнительной информации.
  • group=None - Соответствует другой группе, кроме первой. Редко используется, имеет смысл только в том случае, если ваше регулярное выражение содержит именованные группы. Обратитесь к Документация стандартной библиотеки Python (ключевое слово названные группы) для получения более подробной информации.

отличный ответ, после того, как был найден исходный код, стало довольно ясно, что происходит. это довольно странный параметр и довольно причудливая структура проекта. черт возьми, это даже довольно странно, что они поощряют синтаксический анализ html с помощью регулярных выражений

Evan Carroll 24.07.2018 14:07

Как тот, кто написал этот код, меня, конечно, интересует, почему вы считаете его странным. Что конкретно вы бы изменили? В вашем экстракторе вы можете вместо этого использовать правильный XML-парсер, но не многие веб-сайты последовательно выводят правильно сформированный XML или даже HTML. Единственное ограничение - вы не можете использовать библиотеки вне стандартной библиотеки Python 2.7+. Это преднамеренный компромисс между удобством пользователя и удобством разработчика, и, на мой взгляд, в является основной причиной успеха youtube-dl над «конкурирующими» проектами.

anon 24.07.2018 14:33

Я бы предпочел что-то вроде абстракции jquery / css над HTML-регулярным выражением (которым, как я полагаю, является pyquery)?

Evan Carroll 24.07.2018 14:59

Похоже, что такой проект лучше всего подходит для node / rx.js, где у вас есть доступ к dom и вы можете запускать безголовый режим. Регулярное выражение кажется хрупким и более трудоемким, .attr('href') может легко определить имя для сообщения об ошибке: "[Extractor: %s] Asserts attribute %s be present, and it's not on line %s". Это также больше, чем я привык, когда разбираю HTML, и chrome-dev-toolkit сгенерирует для меня css-селекторы. (хотя с регулярными выражениями проблем нет, я просто не вижу причин выполнять больше работы для получения более хрупкого результата).

Evan Carroll 24.07.2018 15:02

Номера строк бесполезны, поскольку они время от времени меняются и могут вводить в заблуждение; многие пользователи youtube-dl сообщают только небольшую часть фактического сообщения об ошибке, несмотря на инструкции в самом сообщении об ошибке сообщать обо всем. Но да, я согласен, было бы здорово иметь парсер HTML и механизм выбора запросов CSS! Увы, приходится работать с имеющимися инструментами. Если вы готовы предоставить код для синтаксического анализа HTML и селекторов запросов CSS в youtube-dl - или в стандартную библиотеку Python - я уверен, что все будут очень довольны.

anon 24.07.2018 17:02

Другие вопросы по теме