2015-10-12 57 views
0

請有人幫我找出我找不到解決方案的exceptions.ImportError:沒有模塊命名中間件由我的代碼拋出。Scrapy- exceptions.ImportError:沒有模塊命名中間件

我的文件夾結構是:

enter image description here

這裏是我的DOWNLOADER_MIDDLEWARES在settings.py:

DOWNLOADER_MIDDLEWARES = { 
    'IpRotation.middlewares.MyCustomDownloaderMiddleware': 543, 
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': None, 
    'IpRotation.ProxyMiddleware.ProxyMiddleware': 800, 
    'scrapy.downloadermiddleware.useragent.UserAgentMiddleware' : None, 
    'IpRotation.RotateUserAgentMiddleware.RotateUserAgentMiddleware':350 
} 

我的蜘蛛程序:

import scrapy  
class DmozSpider(scrapy.Spider): 
     name = "dmoz" 
     allowed_domains = ["dmoz.org"] 
     start_urls = [ 
      "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/", 
      "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/" 
     ] 

     def parse(self, response): 
      filename = response.url.split("/")[-2] + '.html' 
      with open(filename, 'wb') as f: 
       f.write(response.body) 

我的自定義UserAgent的Middleware.py:

import logging 
import random 
import scrapy 
from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware 

class RotateUserAgentMiddleware(UserAgentMiddleware): 
    def __init__(self, user_agent=''): 
     self.user_agent = user_agent 

    def process_request(self, request, spider): 
     user_agent_list = [....] 
     ua = random.choice(user_agent_list) 
     if ua: 
      request.headers.setdefault('User-Agent', ua) 
      spider.log(
       u'User-Agent: {} {}'.format(request.headers.get('User-Agent'), request) 

我的自定義IPRotationMiddleWare.py:

import random 
from scrapy.downloadermiddlewares.httpproxy import HttpProxyMiddleware 

class ProxyMiddleware(HttpProxyMiddleware): 
    def __init__(self, proxy_ip=''): 
     self.proxy_ip = proxy_ip 

    def process_request(self,request,spider): 
     ip = random.choice(self.proxy_list) 
     if ip: 
      request.meta['proxy']= ip 


    proxy_list = [.......] 

我無法找到指定的異常的中間件的問題。

回答

1

誤差隨您DOWNLOADER_MIDDLEWARES,你在第一個地方有:

'IpRotation.middlewares.MyCustomDownloaderMiddleware': 543, 

這看起來對middlewares模塊中的MyCustomDownloaderMiddleware。如果這個文件不存在(middlewares.py),那麼你得到的錯誤。

請確保您的設置也適用於其他中間件。

+0

保持簡單,我需要使用scrapy來發送代理請求。所以我重寫了UserAgentMiddleware類和HttpProxyMiddleware類,一切都很相似。現在我的問題是,我需要在middleware.py模塊中實現。在我的場景中,我完全不知道middleware.py的實現。 –

0

我相信答案很簡單..

變化

'IpRotation.middlewares.MyCustomDownloaderMiddleware': 543, 

'IpRotation.middleware.MyCustomDownloaderMiddleware': 543, 

文件是middleware.py。注意它不是中間件s .py