V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
magic3584
V2EX  ›  Python

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

  •  
  •   magic3584 · 2017-06-30 14:41:53 +08:00 · 2927 次点击
    这是一个创建于 2498 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    2

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

    3

    文件目录结构如下:

    2

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

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

    然后回到 Project Interpreter 那里换不同 python 版本,用 绿箭头( Run )跑
    xiahei
        5
    xiahei  
       2017-06-30 14:58:21 +08:00 via Android   ❤️ 1
    直接运行 spider_main.py 他就是最顶层的包 /模块 /文件,也就是 if __name__ == “__main__” 的原理,故不会再往上找。要改只需要在 douban_spider 同级目录下添加入口文件,把 douban_spider 作为包,导入你要运行的模块即可。
    magic3584
        6
    magic3584  
    OP
       2017-06-30 15:09:46 +08:00
    @wlsnx 不行。。。
    magic3584
        7
    magic3584  
    OP
       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
        8
    magic3584  
    OP
       2017-06-30 15:13:59 +08:00
    @xiahei
    if __name == '__main__' 我现在是写在 spider_main.py 里。能否详细说下你说的入口文件怎么弄吗?
    cxbig
        9
    cxbig  
       2017-06-30 15:14:28 +08:00   ❤️ 1
    @magic3584 看上去一个是 v2 一个是 v3 啊,你用 v2 的那个跑一下看看
    magic3584
        10
    magic3584  
    OP
       2017-06-30 15:22:21 +08:00
    @cxbig 我把两个改成一样了。直接在 spider_mian.py 上右击运行也跑不了。还是 module 的问题
    xiahei
        11
    xiahei  
       2017-06-30 15:24:58 +08:00   ❤️ 1
    @magic3584 最简单的办法:

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

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

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

    GoBeyond
        16
    GoBeyond  
       2017-06-30 15:43:22 +08:00 via Android   ❤️ 1
    简单看了一下,我先不分析你在 IDE 里为什么能跑这个,我搞不懂你在主入口头部 import 时还要加上`from douban_spider `这一句?想写模块?
    解决方法就是把`from douban_spider`去掉,毕竟你主入口在那个目录里,你要是这么写的话解释器根本找不到那个模块。如果硬要写 from 的话,把那句改成`from . import html_downloader, html_parser, html_outputer`,这样解释器也会从当前目录里找对应模块
    建议学习一下 py 的 import 路径问题。
    magic3584
        17
    magic3584  
    OP
       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
        18
    aaronzjw  
       2017-06-30 15:47:20 +08:00 via Android   ❤️ 1
    @magic3584 出错的内容贴出来看看
    magic3584
        19
    magic3584  
    OP
       2017-06-30 15:49:53 +08:00
    @GoBeyond 我看着教程里就这样写的。教程也是用 IDE 跑的。我想在终端里试试发现怎么都搞不好。。。按照您的指点改成 from .douban_spider import xxx 可以了。结构什么的还是不太懂,还得再看看。谢谢
    magic3584
        20
    magic3584  
    OP
       2017-06-30 15:50:45 +08:00
    @xiahei #16 解释清楚了,谢谢您的指点
    magic3584
        21
    magic3584  
    OP
       2017-06-30 15:51:40 +08:00
    @aaronzjw 现在可以了,谢谢
    xiahei
        22
    xiahei  
       2017-06-30 15:51:59 +08:00
    @magic3584 帮不了你,恕我愚钝,猜不透那 4 个错误是啥子错误,也不知道什么手动输入。北京有个龙泉寺,去看看,你先别告诉大师报的错,看大师能算出来你的代码报什么错误你给什么输入不。
    Allianzcortex
        23
    Allianzcortex  
       2017-06-30 15:52:11 +08:00 via iPhone   ❤️ 1
    magic3584
        24
    magic3584  
    OP
       2017-06-30 16:13:05 +08:00
    @xiahei
    我的意思是出现这个错误
    ![4]( http://oscknacsp.bkt.clouddn.com/4.png)

    注释掉的话反而运行不了,但是手动敲代码的话也没有提示,不像导入 bs4 一样打了 from b 就会提示 bs4
    zeny620
        25
    zeny620  
       2017-07-01 11:38:36 +08:00 via Android
    现在寺庙都有这业务了?!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2157 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 04:53 · PVG 12:53 · LAX 21:53 · JFK 00:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.