PySpider 使用过程中的问题记录

908 阅读3分钟

问题记录

PyCurl的问题

安装时出现:

  • Command python setup.py egg_info failed with error code 1 in /tmp/pip-build-vqUn8V/pycurl
  • ImportError: pycurl: libcurl link-time ssl backend (nss) is different from compile-time ssl backend (openssl)

这个问题是系统的libcurl编译方式引起的,更改环境变量为openssl即可。

解决方法来自这里

解决方式:

 sudo pip uninstall pycurl
 # 设置环境变量
 export PYCURL_SSL_LIBRARY=openssl

wsgidav的问题

运行时出现Deprecated option 'domaincontroller': use 'http_authenticator.domain_controller' instead.

此问题是因为wsgidav最新版为3.x,pyspider采用的是2.x,写法上不兼容老版本,因此解决方法有两种:

  • 将wsgidav卸载后安装指定2.4.1版本

    pip uninstall wsgidav
    pip install wsgidav==2.4.1
    
  • 修改pyspider文件

    # pyspider文件路径 pyspider/webui/webdav.py
    # 209行:'domaincontroller': NeedAuthController(app)
    # 修改如下
    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)
    

    解决方法来自这里

tornado的问题

同上描述,默认安装的tornado为5.x,与pyspider所使用的老版本不兼容,卸载后安装指定4.x把版本即可。

 pip install tornado==4.5

ModuleNotFoundError: No module named 'MySQLdb'

缺少包,python2环境下pip安装mysqldb,python3环境下安装MySQLclient

connect to scheduler rpc error: error(111, ‘Connection refused’)

这个问题没解决……

爬虫框架是分组件的,pyspider在运行时可以直接pyspider all,也可以单独运行scheduler,如果是前者,跑一会就会出现这个错误,如果是后者,得跑好一会才会出现,无法查到相关资料。

pyspider和scrapy对比哪个好?

没有哪个好哪个不好,适合自己的才是最好,那么哪个才是适合自己的?

pyspider自带webui,可以在浏览器中写代码(很不方便),其代码存储在sqlite3中的,作者说是为了方便做分布式,但我在使用时都是在pycharm中写完再复制到浏览器中,虽然pyspider也提供了webdav,可以将代码映射到本地,但还是很不方便,喏,上面wsgidav的bug就这么产生的:(

pyspider运行时可以「单步调试」,非常适合新手期,爬虫运行的每一步都可以在浏览器中看到。

而scrapy是纯命令行模式,如果要跑在服务器上,也需要配合一些爬虫管理框架,如scrapydScrapydWeb

scrapy的中间件是一大亮点,别人写好的你可以直接拿来用。

麻烦是麻烦了点,但你学会后就犹如手握屠龙刀,强大无匹。

还有scrapy的官网比较漂亮,文档相当清晰,pyspider的文档应该是N年没更新了,且不详细。

截止到写本文时,pyspider的最后一个release版本是2018年4月18的0.3.10,开发版是到今年3月份,项目几乎是作者一个人维护,所以在issue和更新上不如scrapy。

总结一下,个人建议,仅供参考,如果是刚入门的新手,建议学习下pyspider练手,毕竟多学一点又不亏,如果是公司项目,建议scrapy。

本文最先发表于个人网站「花墨世界」

关注公众号查看我的更多文章:花墨世界