2012-02-11 23 views
2

私はまだScrapyを試していますが、ローカルネットワーク上のWebサイトをクロールしようとしています。ウェブサイトのIPアドレスは192.168.0.185です。IPアドレスでローカルWebサイトをクロールする

from scrapy.spider import BaseSpider 
class 192.168.0.185_Spider(BaseSpider): 
     name = "192.168.0.185" 
     allowed_domains = ["192.168.0.185"] 
     start_urls = ["http://192.168.0.185/"] 

     def parse(self, response): 
      print "Test:", response.headers 

そして、私のクモと同じディレクトリに私はクモを実行するには、このシェルコマンドを実行したい::

scrapy crawl 192.168.0.185 

そして、私は非常に醜い、判読できないエラーメッセージが表示されますこれは私の蜘蛛です:

2012-02-10 20:55:18-0600 [scrapy] INFO: Scrapy 0.14.0 started (bot: tutorial) 
2012-02-10 20:55:18-0600 [scrapy] DEBUG: Enabled extensions: LogStats, 
TelnetConsole,  CloseSpider, WebService, CoreStats, MemoryUsage, SpiderState 
2012-02-10 20:55:18-0600 [scrapy] DEBUG: Enabled downloader middlewares:  
HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, 
DefaultHeadersMiddleware, RedirectMiddleware, CookiesMiddleware, 
HttpCompressionMiddleware, ChunkedTransferMiddleware, DownloaderStats 
2012-02-10 20:55:18-0600 [scrapy] DEBUG: Enabled spider middlewares: 
HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, 
DepthMiddleware 2012-02-10 20:55:18-0600 [scrapy] DEBUG: Enabled item pipelines: 
Traceback (most recent call last): File "/usr/bin/scrapy", line 5, in <module> 
pkg_resources.run_script('Scrapy==0.14.0', 'scrapy') 
File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 467, in run_script 
self.require(requires)[0].run_script(script_name, ns) 
File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 1200, in run_script 
execfile(script_filename, namespace, namespace) 
File "/usr/lib/python2.6/site-packages/Scrapy-0.14.0-py2.6.egg/EGG-INFO/scripts 
/scrapy", line 4, in <module> 
execute() 
File "/usr/lib/python2.6/site-packages/Scrapy-0.14.0-py2.6.egg/scrapy/cmdline.py", 
line 132, in execute 
_run_print_help(parser, _run_command, cmd, args, opts) 
File "/usr/lib/python2.6/site-packages/Scrapy-0.14.0-py2.6.egg/scrapy/cmdline.py", 
line 97, in _run_print_help func(*a, **kw) 
File "/usr/lib/python2.6/site-packages/Scrapy-0.14.0-py2.6.egg/scrapy/cmdline.py", 
line 139, in _run_command cmd.run(args, opts) 
File "/usr/lib/python2.6/site-packages/Scrapy-0.14.0-py2.6.egg/scrapy/commands 
/crawl.py", line 43, in run 
spider = self.crawler.spiders.create(spname, **opts.spargs) 
File "/usr/lib/python2.6/site-packages/Scrapy-0.14.0-py2.6.egg/scrapy 
/spidermanager.py", line 43, in create 
raise KeyError("Spider not found: %s" % spider_name) 
KeyError: 'Spider not found: 192.168.0.185' 

だから、私はそれがドメイン名ではなくIPアドレスを使用する以外、最初のものと実質的に同じである別のクモを作りました。これはうまくいきました。誰が契約が何であるか知っていますか?ドメイン名ではなくIPアドレス経由でウェブサイトをクロールするにはどうすればよいですか?

from scrapy.spider import BaseSpider 
class facebook_Spider(BaseSpider): 
    name = "facebook" 
    allowed_domains = ["facebook.com"] 
    start_urls = ["http://www.facebook.com/"] 


    def parse(self, response): 
     print "Test:", response.headers 
+0

ホストを説明するためにIPアドレスを使用する理由は何ですか?彼らは自然にホスト名のように記述的ではないので、私はそれらを控えめに使用することをお勧めします。 –

+0

私は、あなたが[Python wiki](http://wiki.python.org/moin/BeginnersGuide/Programmers) – reclosedev

答えて

9
class 192.168.0.185_Spider(BaseSpider): 
    ... 

あなたは数字で始まるか、Pythonでドットを含むクラス名を使用することはできません。

class TestspiderSpider(CrawlSpider): 
    name = 'testspider' 
    allowed_domains = ['192.168.0.185'] 
    start_urls = ['http://www.192.168.0.185/'] 
    ... 

を、おそらくあなたはstart_urlsからwwwを削除する必要があります。

$ scrapy startproject testproj 
$ cd testproj 
$ scrapy genspider testspider 192.168.0.185 
    Created spider 'testspider' using template 'crawl' in module: 
    testproj.spiders.testspider 

スパイダーの定義は次のようになります。あなたが正しい名前で、このクモを作成することができますドキュメントIdentifiers and keywords

を参照してください。クロールを開始するには、代わりにスパイダー名を使用してください。ホスト:

$ scrapy crawl testspider 
+3

からチュートリアルを選ぶことができるように、scrapy、djangoなどのような複雑なフレームワークを使う前にPythonを学ぶことをお勧めします。無効なクラス名の作成を防ぐために、いくつかのチェックをスクレイピーに追加すると便利です。 –

関連する問題