最近在看B站的一个视频学习爬虫, 视频还是今年上半年的, 比较新的, 但是依然遇到了不少兼容问题, 这个做记录, 如果有小伙伴和我一样遇到, 可以对比参考一下怎么解决.
出现的异常
我有三台电脑, 公司一台, 笔记本一台, 台式一台, 都安装有python 3.6.4 和 3.7.2, 都用来学习写一下爬虫脚本 , 在学到 xpath 定位的时候, 我公司那台电脑 在使用 lml.etree 时导包就出错, 找不到包, 上网百度了很久, 都没有解决这个问题.
可是在我另外两台电脑上, 却没有出现这个问题, 这三台电脑的python 解析器都一样. 项目里的解析器也是同一个版本, 都是使用 python3.6.4, 下载的 lml 版本都是同一个版本.
一模一样的xpath 爬取58同城脚本, 在另外两台电脑上能够运行, 但是我公司的电脑就不可以, 直接在导包的时候就报错了.
经过多次试验, 最终发现这个问题的原因, 应该是这个 lxml 库和其他的三方库存在冲突导致的. 因为我在公司的那台电脑, 项目环境用的是本地环境, 本地环境里集成了UI自动化和接口自动化使用到的那些三方库, 这两天才 pip install lxml , 在使用 bs4 的时候并没有任何异常, 使用 xpath的时候就找不到 etree 这个模块.
我的笔记本电脑里, 项目环境用的是集中式虚拟环境, 也是用的 python3.6.4 创建的虚拟环境, 项目环境里只有lxml 这个包, 并没有其他的第三方包,因而能够正常使用.
我的台式电脑, 用的是pipemv 创建的基于项目的虚拟环境, 也是只下载了lxml这个包, 并没有其他的第三方包, 因而也是可以正常使用.
pycharm 里导包 etree 没有提示的原因
from lxml import etree 的时候, 这个 etree 模块并没有 提示, 可是我们使用 pycharm 的时候, 一般都会在导包的时候有提示, 为什么这次没有呢?
因为在 lxml 包里, etree 这个模块是 .pyd 文件, 而 pyd 文件 不是从 python 程序产生, 而是其他语言写成的可以被 python 调用的扩展. 有时候需要依赖其他的dll 文件才能 import 使用.
因此,最终在 pycharm 里是可以使用,但是 pycharm 的包检索机制里没有搜索到这个模块, 因此导包的时候没有提示.