求指点: Python 爬虫 IDE 能跑终端不行

2017-06-30 14:41:53 +08:00
 magic3584

我用 pycharm 写好了一个爬虫后,直接在 spider_main.py 上右击可以运行, 但是终端运行出错。

上传项目到 github 上后在 clone 下来, 直接在 pycharm 里右击运行 spider_main.py,也提示错误了

文件目录结构如下:

GitHub 地址: https://github.com/magic3584/crawl_demo

2976 次点击
所在节点    Python
25 条回复
cxbig
2017-06-30 14:48:07 +08:00
IDE 有自动环境选择,命令行你可能没有配好。
magic3584
2017-06-30 14:50:19 +08:00
@cxbig 环境不就是用的 venv 就行了吗?
wlsnx
2017-06-30 14:56:07 +08:00
你在 crawl_demo 这一层目录,运行 python3 douban_spider/spider_main.py 试试
cxbig
2017-06-30 14:56:53 +08:00
@magic3584 右上角点击右键那个运行是独立于命令行的
先打开配置 > Project > Project Interpreter 看看你用的哪个 python
再去命令行看 which python3 确保都是一致的

然后回到 Project Interpreter 那里换不同 python 版本,用 绿箭头( Run )跑
xiahei
2017-06-30 14:58:21 +08:00
直接运行 spider_main.py 他就是最顶层的包 /模块 /文件,也就是 if __name__ == “__main__” 的原理,故不会再往上找。要改只需要在 douban_spider 同级目录下添加入口文件,把 douban_spider 作为包,导入你要运行的模块即可。
magic3584
2017-06-30 15:09:46 +08:00
@wlsnx 不行。。。
magic3584
2017-06-30 15:11:15 +08:00
@cxbig 项目里 python interpreter 显示
name:Python 3.6.0 virtualenv at ~/Desktop/practice/crawl_demo/venv
Interpreter Path:/Users/wang/Desktop/practice/crawl_demo/venv/bin/python
终端里 which python3
/Users/wang/Desktop/practice/crawl_demo/venv/bin/python3
magic3584
2017-06-30 15:13:59 +08:00
@xiahei
if __name == '__main__' 我现在是写在 spider_main.py 里。能否详细说下你说的入口文件怎么弄吗?
cxbig
2017-06-30 15:14:28 +08:00
@magic3584 看上去一个是 v2 一个是 v3 啊,你用 v2 的那个跑一下看看
magic3584
2017-06-30 15:22:21 +08:00
@cxbig 我把两个改成一样了。直接在 spider_mian.py 上右击运行也跑不了。还是 module 的问题
xiahei
2017-06-30 15:24:58 +08:00
@magic3584 最简单的办法:

```shell
$ cd crawl_demo
$ mv douban_spider/spider_main.py .
$ python3 spider_main.py
```

建议去看看 Python 模块导入机制。
magic3584
2017-06-30 15:30:08 +08:00
@xiahei 要不你去 https://github.com/magic3584/crawl_demo clone 下来试试?我试了你说的方法,还是提示一样的错误。。。
magic3584
2017-06-30 15:31:00 +08:00
@xiahei 我是 clone 下来后弄了个 virtualenv,然后在 venv 里执行 python 的
xiahei
2017-06-30 15:34:57 +08:00
@magic3584 确定按我说的做了?报错了截图呢,目录结构呢?

xiahei
2017-06-30 15:37:26 +08:00
@magic3584 上面的应该是忘了删 douban_spider/spider_main.py,更正如下

GoBeyond
2017-06-30 15:43:22 +08:00
简单看了一下,我先不分析你在 IDE 里为什么能跑这个,我搞不懂你在主入口头部 import 时还要加上`from douban_spider `这一句?想写模块?
解决方法就是把`from douban_spider`去掉,毕竟你主入口在那个目录里,你要是这么写的话解释器根本找不到那个模块。如果硬要写 from 的话,把那句改成`from . import html_downloader, html_parser, html_outputer`,这样解释器也会从当前目录里找对应模块
建议学习一下 py 的 import 路径问题。
magic3584
2017-06-30 15:44:20 +08:00
@xiahei 可以了。。。我还有一点疑问:
spider_main.py 的第一行 from douban_spider import html_downloader, html_parser, html_outputer 为什么会出现 4 个错误呢?但是不影响运行。。。而且手动输入的话也没有提示。不像导入 bs4 那样手动输入的时候会提示
aaronzjw
2017-06-30 15:47:20 +08:00
@magic3584 出错的内容贴出来看看
magic3584
2017-06-30 15:49:53 +08:00
@GoBeyond 我看着教程里就这样写的。教程也是用 IDE 跑的。我想在终端里试试发现怎么都搞不好。。。按照您的指点改成 from .douban_spider import xxx 可以了。结构什么的还是不太懂,还得再看看。谢谢
magic3584
2017-06-30 15:50:45 +08:00
@xiahei #16 解释清楚了,谢谢您的指点

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/372165

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX