如何摆脱 BeautifulSoup 用户警告?

How to get rid of BeautifulSoup user warning?

我安装BeautifulSoup后,每当我在cmd中运行我的Python时,就会出现这个警告。

D:\Application\python\lib\site-packages\beautifulsoup4-4.4.1-py3.4.egg\bs4\__init__.py:166:
UserWarning: No parser was explicitly specified, so I'm using the best
available HTML parser for this system ("html.parser"). This usually isn't a
problem, but if you run this code on another system, or in a different
virtual environment, it may use a different parser and behave differently.

To get rid of this warning, change this:

 BeautifulSoup([your markup])

to this:

 BeautifulSoup([your markup], "html.parser")

为什么会出来,怎么解决,我也没有理想

您的问题的解决方案在错误信息中有明确说明。像下面这样的代码没有指定 XML/HTML/etc。解析器。

BeautifulSoup( ... )

为了修复错误,您需要指定要使用的解析器,如下所示:

BeautifulSoup( ..., "html.parser" )

如果愿意,您还可以安装第 3 方解析器。

文档建议您安装和使用 lxml 以提高速度。

BeautifulSoup(html, "lxml")

If you’re using a version of Python 2 earlier than 2.7.3, or a version of Python 3 earlier than 3.2.2, it’s essential that you install lxml or html5lib–Python’s built-in HTML parser is just not very good in older versions.

正在安装 LXML 解析器

  • 在 Ubuntu (debian)

    apt-get install python-lxml 
    
  • Fedora(基于 RHEL)

    dnf install python-lxml
    
  • 使用画中画

    pip install lxml
    

对于HTML解析器,需要安装html5lib,运行:

pip install html5lib

然后在BeautifulSoup方法中添加html5lib:

htmlDoc = bs4.BeautifulSoup(req1.text, 'html5lib')
print(htmlDoc)

我认为前面的post没有回答问题。

是的,正如大家所说,您可以通过指定解析器来消除警告。
正如文档所指出的,这是性能的最佳实践 1 and for consistency 2.

但在某些情况下,您想使警告静音...因此 post。

  • 因为 BeautifulSoup 4 rev 460, the warning message does not appear in interactive (REPL) 模式
  • 在以下位置有更多通才答案:How to disable python warnings to control Python warnings (TL;DL: PYTHONWARNINGS=ignore or -Wignore)
  • 通过添加到您的代码中来显式抑制警告 (bs4 ≥ rev 569):
    import warnings
    warnings.filterwarnings('ignore', category=GuessedAtParserWarning)
    
  • 通过让 bs4 认为您提供了解析器来作弊,即:
    bs4.BeautifulSoup(
      your_markup,
      builder=bs4.builder_registry.lookup(*bs4.BeautifulSoup.DEFAULT_BUILDER_FEATURES)
    )