美文网首页
Mac下pyspider的安装

Mac下pyspider的安装

作者: 奋斗的张小y | 来源:发表于2019-05-09 17:23 被阅读0次

    最近在学爬虫,在配置环境中遇到几个麻烦,有个困扰不短时间的就是pyspider 的安装。
    这里把安装完成的步骤捋一捋。我是在anaconda下的虚拟环境中安装的,所以,别的情况我不是很清楚。

    1. 安装pycurl
      $ pip install curl

    2. 安装pyspider
      $ pip install pyspider

    3. 尝试运行
      $ pyspider
      这里我就出问题了,显示importError,源码里面使用了async作为变量名,但是python3.7以后async已经是关键字了,所以会报错。(因为我的虚拟环境是3.7,懒得退了)
      下面改动一下源码

    4. 修改
      $ cd ~/anaconda3/envs/webspider/lib/python3.7/site-packages/pyspider
      $ ack async (ack是一个命令行的grep增强工具)
      显示如下:

    run.py
    231:            async=True, get_object=False, no_input=False):
    245:                      poolsize=poolsize, proxy=proxy, async=async)
    365:        webui_fetcher = ctx.invoke(fetcher, async=False, get_object=True, no_input=True, **fetcher_config)
    
    fetcher/tornado_fetcher.py
    81:    def __init__(self, inqueue, outqueue, poolsize=100, proxy=None, async=True):
    89:        self.async = async
    95:        if self.async:
    117:        if self.async:
    118:            return self.async_fetch(task, callback)
    120:            return self.async_fetch(task, callback).result()
    123:    def async_fetch(self, task, callback=None):
    155:            return self.ioloop.run_sync(functools.partial(self.async_fetch, task, lambda t, _, r: True))
    
    webui/app.py
    95:    'fetch': lambda x: tornado_fetcher.Fetcher(None, None, async=False).fetch(x),
    

    可以看到,源码中有很多使用了很多处async,我们进行修改。
    使用vim修改是很快的,但是这里要注意,位于fetcher/tornado_fetcher.py中有几个是导入tornado包中的类名中也包含了async,所以要注意,在修改这个文件时不要全局修改。(async都可以改,Async不能改,都是在类名中)

    1. 再次尝试运行
      $ pyspider
      又报错了
    ValueError: Invalid configuration:
      - Deprecated option 'domaincontroller': use 'http_authenticator.domain_controller' instead.
    

    这是WsgiDAV发布了版本 pre-release 3.x导致的。
    修改 pyspider/webui/webdav.py 第203行:

    config = DEFAULT_CONFIG.copy()
     config.update({
        'mount_path': '/dav',
        'provider_mapping': {
            '/': ScriptProvider(app)
        },
        #'domaincontroller': NeedAuthController(app),
        'http_authenticator': {
            'HTTPAuthenticator':NeedAuthController(app),
        },
        
        'verbose': 1 if app.debug else 0,
        
        'dir_browser': {'davmount': False,
                        #'enable': True,
                        'msmount': False,
                        'response_trailer': ''},
    })
    dav_app = WsgiDAVApp(config)
    

    再次运行pyspider,成功!

     ➜  ~ pyspider all
    phantomjs fetcher running on port 25555
    [I 190509 15:43:32 result_worker:49] result_worker starting...
    [I 190509 15:43:33 processor:211] processor starting...
    [I 190509 15:43:33 tornado_fetcher:638] fetcher starting...
    [I 190509 15:43:33 scheduler:647] scheduler starting...
    [I 190509 15:43:33 scheduler:782] scheduler.xmlrpc listening on 127.0.0.1:23333
    [I 190509 15:43:33 scheduler:586] in 5m: new:0,success:0,retry:0,failed:0
    [I 190509 15:43:33 app:76] webui running on 0.0.0.0:5000
    

    如果你出现特殊情况:

    Error: Could not create web server listening on port 25555
    Error: Could not create web server listening on port 25555
    Error: Could not create web server listening on port 25555
    ...
    

    是因为你后台运行了phantomjs
    $ ps

      PID TTY           TIME CMD
      371 ttys000    0:00.05 /Applications/iTerm.app/Contents/MacOS/iTerm2 --server /usr/bin/login -fqpl zhangyin /Applications/iTerm.app/Contents/MacOS/iTerm2
      375 ttys000    0:01.19 -zsh
     1351 ttys000    2:13.00 phantomjs --ssl-protocol=any --disk-cache=true /Users/zhangyin/anaconda3/envs/six/lib/python3.6/site-packages/pyspider/fetcher/pha
     2289 ttys000    0:00.03 tmux new -s webspider
     3708 ttys001    0:00.90 -zsh
     2476 ttys002    0:00.85 -zsh
     5958 ttys003    0:00.49 -zsh
    

    杀掉进程就可以了
    $ kill -9 1351

    相关文章

      网友评论

          本文标题:Mac下pyspider的安装

          本文链接:https://www.haomeiwen.com/subject/jrqgoqtx.html