Ubuntu18/Python3.5下BeautifulSoup4安装关联Redis错误及运行失败求助
解决BeautifulSoup4安装关联Redis错误及运行解析失败问题
看起来你碰到了两个凑在一起的独立问题:重装BeautifulSoup4时意外触发了Redis服务的启动错误,还有运行测试代码时的解析失败。我来帮你一步步拆解解决:
一、先搞定Redis服务的异常(安装BS4时触发的问题)
首先得明确:BeautifulSoup4和Redis之间没有任何依赖关系,你看到的Redis报错纯粹是巧合。这是因为你的系统里redis-server包之前可能安装中断过,处于未完成配置的状态。当你用apt-get reinstall处理BS4时,dpkg会自动尝试修复所有处于异常状态的系统包,刚好轮到Redis了。
处理步骤:
- 先查清楚Redis启动失败的具体原因:
常见原因包括:端口6379被其他进程占用、Redis数据目录权限不对、配置文件语法错误。systemctl status redis-server.service journalctl -xe | grep redis - 针对性修复:
- 如果是端口占用:用
netstat -tulpn | grep 6379找到占用进程,杀掉它或者修改Redis配置文件(/etc/redis/redis.conf)里的port值。 - 如果是权限问题:执行
sudo chown -R redis:redis /var/lib/redis,确保Redis用户能读写数据目录。
- 如果是端口占用:用
- 重启Redis并修复dpkg状态:
sudo systemctl start redis-server sudo dpkg --configure -a
完成后再重装python3-bs4就不会再弹出Redis的错误了。
二、解决BS4运行时的解析错误
你测试代码里的AttributeError: module 'html5lib.treebuilders' has no attribute '_base',是因为系统自带的BS4版本(4.4.1)和当前安装的html5lib版本不兼容——老版本的BS4依赖的是旧版html5lib的内部结构,而新版html5lib已经移除了_base这个模块。
给你两个解决方案:
方案1:改用Python内置解析器(快速解决)
暂时避开html5lib,用Python自带的html.parser,同时注意你代码里的小疏漏:print(soup.prettify)少了括号,这会输出方法对象而不是格式化后的HTML。修改后的代码:
from bs4 import BeautifulSoup html_doc = """ <html><head><title>The Dormouse's story</title></head> """ soup = BeautifulSoup(html_doc, "html.parser") print(soup.prettify()) # 补上括号!
方案2:升级到兼容的BS4和html5lib版本(长期解决)
系统自带的包版本太老,建议用pip安装最新的兼容版本(用虚拟环境更干净):
- 先卸载系统自带的旧包:
sudo apt remove python3-bs4 python3-html5lib - 进入你的虚拟环境安装新版本:
source venv/bin/activate pip install beautifulsoup4 html5lib
安装完成后再运行测试代码,就能正常解析HTML了。
最后总结一下
- Redis的问题是系统包状态异常导致的,和BS4完全无关,修复Redis或dpkg的异常状态就能解决安装时的报错。
- BS4的解析错误是版本不兼容+代码小疏漏导致的,要么换内置解析器,要么升级到最新兼容版本就能搞定。
内容的提问来源于stack exchange,提问作者dam
相关产品推荐
相关产品推荐

