今天遇到了这样一条报错:
opt/conda/envs/python35-paddle120-env/bin/python /home/aistudio/work/main.py aistudio@jupyter-10415006-8838159:~$ /opt/conda/envs/python35-paddle120-env/bin/python /home/aistudio/work/main.py Traceback (most recent call last): File "/home/aistudio/work/main.py", line 43, in <module> spider.run() File "/home/aistudio/work/main.py", line 30, in run books = DataParser.parse_book_page(html) File "/home/aistudio/work/parser.py", line 9, in parse_book_page soup = BeautifulSoup(html, 'lxml') File "/opt/conda/envs/python35-paddle120-env/lib/python3.10/site-packages/bs4/__init__.py", line 364, in __init__ raise FeatureNotFound( bs4.exceptions.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library? aistudio@jupyter-10415006-8838159:~$
错误原因分析
该错误表明BeautifulSoup无法找到lxml
解析器。当代码中使用以下语句时:
python">soup = BeautifulSoup(html, 'lxml')
需要系统中已安装lxml
库,而当前环境中缺少该依赖项。(是的我忘记装了)
解决方案(任选其一)
方案一:安装lxml库(推荐)
python"># 进入当前Python环境
source activate python35-paddle120-env# 安装lxml(选择以下任意一种方式)
pip install lxml # 使用pip安装
conda install lxml # 使用conda安装
方案二:修改解析器类型(这是我看到的第二种方法,试了以下感觉没第一种好)
将代码中的lxml
替换为Python内置的html.parser
:
python"># 修改parser.py文件
soup = BeautifulSoup(html, 'html.parser') # 替换原代码中的'lxml'
验证步骤
- 安装后验证
python">python -c "import lxml; print('lxml版本:', lxml.__version__)"
# 成功输出应显示版本号
如下图所示:
- 重新执行主程序:
python">python /home/aistudio/work/main.py
技术原理说明
解析器 | 安装需求 | 速度 | 容错性 | 依赖项 |
---|---|---|---|---|
html.parser | Python内置无需安装 | 中 | 一般 | 无 |
lxml | 需单独安装 | 快 | 高 | libxml2 |
html5lib | 需单独安装 | 慢 | 极高 | html5lib |
如果还是报错的话
可考虑以下优化: