1. 情景
写好了一个 python 文件,进入 cmd 运行,执行命令 python Test001.py,报错“ bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library?”
源码如下:
# coding=UTF-8
# 通过 requests 模块发起 http 请求
import requests
from bs4 import BeautifulSoup # BeautifulSoup库提供了很多解析html的方法,可以帮助我们很方便地提取我们需要的内容
# 请求的首部信息
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:67.0) Gecko/20100101 Firefox/67.0'
}
url = 'https://xx.xxxx.com/dweb/#/index/5584558414'; #
res = requests.get(url, headers=headers); #利用requests对象的get方法,对指定的url发起请求,得到Response对象
print(res.txt); # 通过Response对象的text方法获取网页的文本信息
soup = BeautifulSoup(res.text, 'lxml') # 通过 BeautifulSoup 对象对网页内容进行解析,lxml 是html解析器
# tags1 = soup.find_all('span',{'class': 'topic-pp'}) # 找出所有 class 为 topic-pp 的 span 标签,并将所有的结果都放入一个 list 返回
# tags2 = soup.find_all('span',{'class': 'reply_text'}) # 找出所有 class 为 reply_text 的 span 标签,并将所有的结果都放入一个 list 返回
topic_list_wrapper = soup.find('div', {'class': 'topic_list_wrapper'}) # 找出 class 属性值为 topic_list_wrapper 的 div
topics = topic_list_wrapper_all('li') #找出 topic_list_wrapper 下的所有 li 标签
topics_content = []
topics_comments = []
# 遍历 topics
for i in topics:
try:
content = i.find('p', {'class': 'topic-pp'}).get_text().strip() # 提取主题内容
comments = i.find('span', {'class': 'reply_text'}).get_text().strip() # 提取评论
# 存储爬取结果
topics_content.append(content)
topics_comments.append(comments)
print('主题内容', content)
print('成员评论', comments)
print()
except AttributeError as e:
continue
2. 原因
bs4调用了python自带的html解析器,我用的mac,默认安装的是python2,所以内置的解释器也是捆绑在python2上,而我学习的时候又自己安装了python3,开发环境也是python3的,貌似是没有html解释器,所以会报错。
问题找到了,那么怎么解决呢?对,在python3也装一个html解析器就好了,那么怎么安装呢?查阅资料获悉:一般pip和pip2对应的是python2.x,pip3对应的是python3.x的版本,python2和python3的模块是独立的,不能混用,混用会出问题。所以命令行通过python3的pip:pip3 安装解析器:
参阅文章:https://blog.csdn.net/qq_34215281/article/details/77714584
3. 解决办法
进入 Python 安装路径下的 Scripts目录,执行 pip2 install lxml 或 pip3 install lxml。根据使用的python版本定。
网友评论