Beautiful Soup 4 find_all не нашел ссылки, которые нашел Beautiful Soup 3

Я заметил очень раздражающую ошибку: BeautifulSoup4 (пакет: bs4 ) часто находит меньше тегов, чем предыдущая версия (пакет: BeautifulSoup ).

Вот воспроизводимый пример этой проблемы:

  • BeautifulSoup4 stripped_strings дает мне байтовые объекты?
  • Как найти тег с определенным текстом с помощью Beautiful Soup?
  • Как вытащить атрибуты CSS из встроенных стилей с помощью BeautifulSoup
  • Почему BeautifulSoup не находит конкретный класс таблицы?
  • UnicodeEncodeError: кодек ascii не может кодировать символ по специальному имени
  • BeautifulSoup innerhtml?
  •  import requests import bs4 import BeautifulSoup r = requests.get('http://wordpress.org/download/release-archive/') s4 = bs4.BeautifulSoup(r.text) s3 = BeautifulSoup.BeautifulSoup(r.text) print 'With BeautifulSoup 4 : {}'.format(len(s4.findAll('a'))) print 'With BeautifulSoup 3 : {}'.format(len(s3.findAll('a'))) 

    Вывод:

     With BeautifulSoup 4 : 557 With BeautifulSoup 3 : 1701 

    Разница не незначительна, как вы можете видеть.

    Вот точные версии модулей, если кто-то задается вопросом:

     In [20]: bs4.__version__ Out[20]: '4.2.1' In [21]: BeautifulSoup.__version__ Out[21]: '3.2.1' 

  • Python: кортежи / словари в качестве ключей, выберите, отсортируйте
  • Связывание ошибок при компиляции модуля расширения python
  • Разница между «установкой python setup.py» и «pip install»
  • Изменение значения точности и отсутствие изменения значения потерь в двоичной классификации с использованием Tensorflow
  • Почему для установки numpy требуется python-dev в Kubuntu 12.04
  • Есть ли что-то быстрее, чем dict ()?
  • One Solution collect form web for “Beautiful Soup 4 find_all не нашел ссылки, которые нашел Beautiful Soup 3”

    У вас установлен lxml , что означает, что BeautifulSoup 4 будет использовать этот анализатор поверх стандартной html.parser -библиотеки.

    Вы можете обновить lxml до 3.2.1 (что для меня возвращает 1701 результат для вашей тестовой страницы); Сам lxml использует libxml2 и libxslt которые могут быть виноваты здесь. Возможно, вам придется обновить их вместо этого. См. Страницу требований lxml ; в настоящее время рекомендуется использовать libxml2 2.7.8 или новее.

    Или явно укажите другой парсер при разборе супа:

     s4 = bs4.BeautifulSoup(r.text, 'html.parser') 
    Python - лучший язык программирования в мире.