Windows 下Python安装Scrapy问题解决方法

引言: Scrapy是爬虫界大名鼎鼎的存在,在Linux下安装非常顺利,但是在Windows下确实非常多的问题发生,这里记录存在的各类问题以及如何解决。


1.   安装Scrapy失败

     直接在windows下安装scrapy大概率会是失败的,各类不同的原因,主要是各类依赖包未必全部安装,故依据具体的问题而定。

     >> pip install scrapy

2.   安装visual c++ build tools

    这个工具是由微软提供,主要是用于编译相关的源代码而成的:

    下载地址: http://www.microsoft.com/zh-CN/download/details.aspx?id=48159

3.  openssl 之不是有效的win 32程序

[html]  view plain  copy
  1. Traceback (most recent call last):  
  2.   File "D:\Program Files\python\Scripts\scrapy-script.py", line 11, in <module>  
  3.     load_entry_point('scrapy==1.1.3', 'console_scripts', 'scrapy')()  
  4.   File "D:\Program Files\python\lib\site-packages\scrapy-1.1.3-py3.5.egg\scrapy\cmdline.py", line 121, in execute  
  5.     cmds = _get_commands_dict(settings, inproject)  
  6.   File "D:\Program Files\python\lib\site-packages\scrapy-1.1.3-py3.5.egg\scrapy\cmdline.py", line 45, in _get_commands_dict  
  7.     cmds = _get_commands_from_module('scrapy.commands', inproject)  
  8.   File "D:\Program Files\python\lib\site-packages\scrapy-1.1.3-py3.5.egg\scrapy\cmdline.py", line 28, in _get_commands_from_module  
  9.     for cmd in _iter_command_classes(module):  
  10.   File "D:\Program Files\python\lib\site-packages\scrapy-1.1.3-py3.5.egg\scrapy\cmdline.py", line 19, in _iter_command_classes  
  11.     for module in walk_modules(module_name):  
  12.   File "D:\Program Files\python\lib\site-packages\scrapy-1.1.3-py3.5.egg\scrapy\utils\misc.py", line 71, in walk_modules  
  13.     submod = import_module(fullpath)  
  14.   File "D:\Program Files\python\lib\importlib\__init__.py", line 126, in import_module  
  15.     return _bootstrap._gcd_import(name[level:], package, level)  
  16.   File "<frozen importlib._bootstrap>", line 978, in _gcd_import  
  17.   File "<frozen importlib._bootstrap>", line 961, in _find_and_load  
  18.   File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked  
  19.   File "<frozen importlib._bootstrap>", line 655, in _load_unlocked  
  20.   File "<frozen importlib._bootstrap_external>", line 678, in exec_module  
  21.   File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed  
  22.   File "D:\Program Files\python\lib\site-packages\scrapy-1.1.3-py3.5.egg\scrapy\commands\version.py", line 6, in <module>  
  23.     import OpenSSL  
  24.   File "D:\Program Files\python\lib\site-packages\OpenSSL\__init__.py", line 8, in <module>  
  25.     from OpenSSL import rand, crypto, SSL  
  26.   File "D:\Program Files\python\lib\site-packages\OpenSSL\rand.py", line 12, in <module>  
  27.     from OpenSSL._util import (  
  28.   File "D:\Program Files\python\lib\site-packages\OpenSSL\_util.py", line 6, in <module>  
  29.     from cryptography.hazmat.bindings.openssl.binding import Binding  
  30.   File "D:\Program Files\python\lib\site-packages\cryptography\hazmat\bindings\openssl\binding.py", line 14, in <module>  
  31.     from cryptography.hazmat.bindings._openssl import ffi, lib  
  32. ImportError: DLL load failed: %1 不是有效的 Win32 应用程序。  
如何解决?

 >>   pip uninstall pyopenssl

 >>  pip uninstall cryptography

扫描二维码关注公众号,回复: 2409628 查看本文章

 >>  pip install pyopenssl

  >>  pip install cryptography

4.   问题 ModuleNotFoundError: No module named '_cffi_backend'

   错误信息:

[html]  view plain  copy
  1. 2017-03-31 14:56:42 [scrapy] INFO: Scrapy 1.1.3 started (bot: scrapybot)  
  2. 2017-03-31 14:56:42 [scrapy] INFO: Overridden settings: {'DUPEFILTER_CLASS': 'scrapy.dupefilters.BaseDupeFilter', 'LOGSTATS_INTERVAL': 0}  
  3. 2017-03-31 14:56:42 [scrapy] INFO: Enabled extensions:  
  4. ['scrapy.extensions.corestats.CoreStats',  
  5.  'scrapy.extensions.telnet.TelnetConsole']  
  6. Traceback (most recent call last):  
  7.   File "D:\Program Files\python\Scripts\scrapy-script.py", line 11, in <module>  
  8.     load_entry_point('scrapy==1.1.3', 'console_scripts', 'scrapy')()  
  9.   File "D:\Program Files\python\lib\site-packages\scrapy-1.1.3-py3.5.egg\scrapy\cmdline.py", line 142, in execute  
  10.     _run_print_help(parser, _run_command, cmd, args, opts)  
  11.   File "D:\Program Files\python\lib\site-packages\scrapy-1.1.3-py3.5.egg\scrapy\cmdline.py", line 88, in _run_print_help  
  12.     func(*a, **kw)  
  13.   File "D:\Program Files\python\lib\site-packages\scrapy-1.1.3-py3.5.egg\scrapy\cmdline.py", line 149, in _run_command  
  14.     cmd.run(args, opts)  
  15.   File "D:\Program Files\python\lib\site-packages\scrapy-1.1.3-py3.5.egg\scrapy\commands\shell.py", line 65, in run  
  16.     crawler.engine = crawler._create_engine()  
  17.   File "D:\Program Files\python\lib\site-packages\scrapy-1.1.3-py3.5.egg\scrapy\crawler.py", line 97, in _create_engine  
  18.     return ExecutionEngine(self, lambda _: self.stop())  
  19.   File "D:\Program Files\python\lib\site-packages\scrapy-1.1.3-py3.5.egg\scrapy\core\engine.py", line 68, in __init__  
  20.     self.downloader = downloader_cls(crawler)  
  21.   File "D:\Program Files\python\lib\site-packages\scrapy-1.1.3-py3.5.egg\scrapy\core\downloader\__init__.py", line 88, in __init__  
  22.     self.middleware = DownloaderMiddlewareManager.from_crawler(crawler)  
  23.   File "D:\Program Files\python\lib\site-packages\scrapy-1.1.3-py3.5.egg\scrapy\middleware.py", line 58, in from_crawler  
  24.     return cls.from_settings(crawler.settings, crawler)  
  25.   File "D:\Program Files\python\lib\site-packages\scrapy-1.1.3-py3.5.egg\scrapy\middleware.py", line 34, in from_settings  
  26.     mwcls = load_object(clspath)  
  27.   File "D:\Program Files\python\lib\site-packages\scrapy-1.1.3-py3.5.egg\scrapy\utils\misc.py", line 44, in load_object  
  28.     mod = import_module(module)  
  29.   File "D:\Program Files\python\lib\importlib\__init__.py", line 126, in import_module  
  30.     return _bootstrap._gcd_import(name[level:], package, level)  
  31.   File "<frozen importlib._bootstrap>", line 978, in _gcd_import  
  32.   File "<frozen importlib._bootstrap>", line 961, in _find_and_load  
  33.   File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked  
  34.   File "<frozen importlib._bootstrap>", line 655, in _load_unlocked  
  35.   File "<frozen importlib._bootstrap_external>", line 678, in exec_module  
  36.   File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed  
  37.   File "D:\Program Files\python\lib\site-packages\scrapy-1.1.3-py3.5.egg\scrapy\downloadermiddlewares\retry.py", line 23, in <module>  
  38.     from scrapy.xlib.tx import ResponseFailed  
  39.   File "D:\Program Files\python\lib\site-packages\scrapy-1.1.3-py3.5.egg\scrapy\xlib\tx\__init__.py", line 3, in <module>  
  40.     from twisted.web import client  
  41.   File "D:\Program Files\python\lib\site-packages\twisted\web\client.py", line 42, in <module>  
  42.     from twisted.internet.endpoints import HostnameEndpoint, wrapClientTLS  
  43.   File "D:\Program Files\python\lib\site-packages\twisted\internet\endpoints.py", line 37, in <module>  
  44.     from twisted.internet.stdio import StandardIO, PipeAddress  
  45.   File "D:\Program Files\python\lib\site-packages\twisted\internet\stdio.py", line 30, in <module>  
  46.     from twisted.internet import _win32stdio  
  47.   File "D:\Program Files\python\lib\site-packages\twisted\internet\_win32stdio.py", line 9, in <module>  
  48.     import win32api  
  49. ModuleNotFoundError: No module named 'win32api'  
 How to solve it?

  >> pip install pypiwin32

5.  scrapy shell url 发生TypeError: 'float' object is not iterable

  错误信息: 

[html]  view plain  copy
  1. 2017-03-31 15:07:16 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023  
  2. 2017-03-31 15:07:16 [scrapy] INFO: Spider opened  
  3. Traceback (most recent call last):  
  4.   File "D:\Program Files\python\Scripts\scrapy-script.py", line 11, in <module>  
  5.     load_entry_point('scrapy==1.1.3', 'console_scripts', 'scrapy')()  
  6.   File "D:\Program Files\python\lib\site-packages\scrapy-1.1.3-py3.5.egg\scrapy\cmdline.py", line 142, in execute  
  7.     _run_print_help(parser, _run_command, cmd, args, opts)  
  8.   File "D:\Program Files\python\lib\site-packages\scrapy-1.1.3-py3.5.egg\scrapy\cmdline.py", line 88, in _run_print_hel  
  9.     func(*a, **kw)  
  10.   File "D:\Program Files\python\lib\site-packages\scrapy-1.1.3-py3.5.egg\scrapy\cmdline.py", line 149, in _run_command  
  11.     cmd.run(args, opts)  
  12.   File "D:\Program Files\python\lib\site-packages\scrapy-1.1.3-py3.5.egg\scrapy\commands\shell.py", line 71, in run  
  13.     shell.start(url=url)  
  14.   File "D:\Program Files\python\lib\site-packages\scrapy-1.1.3-py3.5.egg\scrapy\shell.py", line 47, in start  
  15.     self.fetch(url, spider)  
  16.   File "D:\Program Files\python\lib\site-packages\scrapy-1.1.3-py3.5.egg\scrapy\shell.py", line 112, in fetch  
  17.     reactor, self._schedule, request, spider)  
  18.   File "D:\Program Files\python\lib\site-packages\twisted\internet\threads.py", line 122, in blockingCallFromThread  
  19.     result.raiseException()  
  20.   File "D:\Program Files\python\lib\site-packages\twisted\python\failure.py", line 372, in raiseException  
  21.     raise self.value.with_traceback(self.tb)  
  22. TypeError: 'float' object is not iterable  
   检查当下的twisted版本是17.1.0, 需要切换至16.6.0

 >>  pip uninstall twisted

    >> pip install twisted==16.6.0

6.  总结

   scrapy在Linux安装非常顺利,但是在Windows上却问题多多,一波三折,个人建议,如果玩开发,还是推荐linux或者mac。

猜你喜欢

转载自blog.csdn.net/qing666888/article/details/79433757