2012-01-24 20 views
1

不知道我是否遇到Scrapy或Twisted的問題?通過easy_install運行Python 2.7 32位和最新scrapy/dependencies通過easy_install運行使用FormRequest.from_response()來模擬用戶登錄 - FormRequest未定義

嘗試模擬POST請求登錄並使其正常工作。回到tutorial from Scrapy這樣做,它不起作用。

這裏是蜘蛛代碼:

from scrapy.spider import BaseSpider 

class LoginSpider(BaseSpider): 
    name = 'example.com' 
    start_urls = ['http://www.example.com/users/login.php'] 

    def parse(self, response): 
     return [FormRequest.from_response(response, 
        formdata={'username': 'john', 'password': 'secret'}, 
        callback=self.after_login)] 

    def after_login(self, response): 
     # check login succeed before going on 
     if "authentication failed" in response.body: 
      self.log("Login failed", level=log.ERROR) 
      return 

     # continue scraping with authenticated session... 
_________________________________________ 

下面是結果:

C:\Users\jhoiland\scrapy\tutorial>scrapy crawl example.com 
2012-01-23 18:59:39-0800 [scrapy] INFO: Scrapy 0.14.1 started (bot: tutorial) 
2012-01-23 18:59:39-0800 [scrapy] DEBUG: Enabled extensions: LogStats, TelnetCon 
sole, CloseSpider, WebService, CoreStats, SpiderState 
2012-01-23 18:59:39-0800 [scrapy] DEBUG: Enabled downloader middlewares: HttpAut 
hMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, De 
faultHeadersMiddleware, RedirectMiddleware, CookiesMiddleware, HttpCompressionMi 
ddleware, ChunkedTransferMiddleware, DownloaderStats 
2012-01-23 18:59:39-0800 [scrapy] DEBUG: Enabled spider middlewares: HttpErrorMi 
ddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddle 
ware 
2012-01-23 18:59:39-0800 [scrapy] DEBUG: Enabled item pipelines: 
2012-01-23 18:59:39-0800 [example.com] INFO: Spider opened 
2012-01-23 18:59:39-0800 [example.com] INFO: Crawled 0 pages (at 0 pages/min), s 
craped 0 items (at 0 items/min) 
2012-01-23 18:59:39-0800 [scrapy] DEBUG: Telnet console listening on 0.0.0.0:602 
3 
2012-01-23 18:59:39-0800 [scrapy] DEBUG: Web service listening on 0.0.0.0:6080 
2012-01-23 18:59:39-0800 [example.com] DEBUG: Redirecting (302) to <GET http://w 
ww.iana.org/domains/example/> from <GET http://www.example.com/users/login.php> 
2012-01-23 18:59:39-0800 [example.com] DEBUG: Crawled (200) <GET http://www.iana 
.org/domains/example/> (referer: None) 
2012-01-23 18:59:39-0800 [example.com] ERROR: Spider error processing <GET http: 
//www.iana.org/domains/example/> 
     Traceback (most recent call last): 
      File "C:\Python27\lib\site-packages\twisted\internet\base.py", line 11 
78, in mainLoop 
      self.runUntilCurrent() 
      File "C:\Python27\lib\site-packages\twisted\internet\base.py", line 80 
0, in runUntilCurrent 
      call.func(*call.args, **call.kw) 
      File "C:\Python27\lib\site-packages\twisted\internet\defer.py", line 3 
62, in callback 
      self._startRunCallbacks(result) 
      File "C:\Python27\lib\site-packages\twisted\internet\defer.py", line 4 
58, in _startRunCallbacks 
      self._runCallbacks() 
     --- <exception caught here> --- 
      File "C:\Python27\lib\site-packages\twisted\internet\defer.py", line 5 
45, in _runCallbacks 
      current.result = callback(current.result, *args, **kw) 
      File "C:\Users\jhoiland\scrapy\tutorial\tutorial\spiders\dmoz.py", lin 
**e 8, in parse 
      return [FormRequest.from_response(response, 
     **exceptions.NameError: global name 'FormRequest' is not defined**** 

2012-01-23 18:59:39-0800 [example.com] INFO: Closing spider (finished) 
2012-01-23 18:59:39-0800 [example.com] INFO: Dumping spider stats: 
     {'downloader/request_bytes': 426, 
     'downloader/request_count': 2, 
     'downloader/request_method_count/GET': 2, 
     'downloader/response_bytes': 1546, 
     'downloader/response_count': 2, 
     'downloader/response_status_count/200': 1, 
     'downloader/response_status_count/302': 1, 
     'finish_reason': 'finished', 
     'finish_time': datetime.datetime(2012, 1, 24, 2, 59, 39, 576000), 
     'scheduler/memory_enqueued': 2, 
     'spider_exceptions/NameError': 1, 
     'start_time': datetime.datetime(2012, 1, 24, 2, 59, 39, 239000)} 
2012-01-23 18:59:39-0800 [example.com] INFO: Spider closed (finished) 
2012-01-23 18:59:39-0800 [scrapy] INFO: Dumping global stats: 
     {} 

任何想法去哪裏尋找問題?我錯過了一個進口或什麼?

回答

7

是的,你錯過了一個導入:

from scrapy.http import FormRequest