2017-09-12 15 views
1

Pymongoを介してスクラピーパイプラインを使用してMongoDBに接続しようとしていますが、新しいデータベースを作成して、ちょうど擦ったもので移植していますが、問題。私は基本的なチュートリアルに従い、2つのコマンドラインを設定しました.1つはscongを実行し、もう1つはmongodを実行します。残念ながら、mongodを実行した後にスクラップコードを実行すると、mongodは、私がセットアップしようとしている、そして、ポート27107の接続を待っているという通知をパイプライン上で受け取るようには見えません。 Iは、ドキュメント/ PyProjects /のtwitterBOT(Scratch MongoDBパイプラインが動作しない)

として設定Iコマンドライン2(のmongod)の文書/ PyProjects /のtwitterBOT /クルーグマン

としてディレクトリを設定するコマンドライン1(scrapy)において

スクリプトI使用しています次のとおりです。 クルーグマン/クルーグマン/スパイダー/ krugSpider.py(ポール・クルーグマンのブログエントリを引く):

from scrapy import http 
from scrapy.selector import Selector 
from scrapy.spiders import CrawlSpider 
import scrapy 
import pymongo 
import json 
from krugman.items import BlogPost 


class krugSpider(CrawlSpider): 
    name = 'krugbot' 
    start_url = ['https://krugman.blogs.nytimes.com'] 

    def __init__(self): 
     self.url = 'https://krugman.blogs.nytimes.com/more_posts_jsons/page/{0}/?homepage=1&apagenum={0}' 

    def start_requests(self): 
     yield http.Request(self.url.format('1'), callback = self.parse_page) 

    def parse_page(self, response): 
     data = json.loads(response.body) 
     for block in range(len(data['posts'])): 
      for article in self.parse_block(data['posts'][block]): 
       yield article 


     page = data['args']['paged'] + 1 
     url = self.url.format(str(page)) 
     yield http.Request(url, callback = self.parse_page) 


    def parse_block(self, content): 
     article = BlogPost(author = 'Paul Krugman', source = 'Blog')     
     paragraphs = Selector(text = str(content['html'])) 

     article['paragraphs']= paragraphs.css('p.story-body-text::text').extract() 
     article['links'] = paragraphs.css('p.story-body-text a::attr(href)').extract() 
     article['datetime'] = content['post_date'] 
     article['post_id'] = content['post_id'] 
     article['url'] = content['permalink'] 
     article['title'] = content['headline'] 

     yield article 

クルーグマン/クルーグマン/ settings.py:

ITEM_PIPELINES = ['krugman.pipelines.KrugmanPipeline'] 

MONGODB_SERVER = 'localhost' 
MONGODB_PORT = 27017 
MONGODB_DB = 'ScrapeDB' 
MONGODB_TWEETS = 'tweetCol' 
MONGODB_FACEBOOK = 'fbCol' 
MONGODB_BLOG = 'blogCol' 

クルーグマン/クルーグマン/ pipelines.py

from pymongo import MongoClient 
from scrapy.conf import settings 
from scrapy import log 

class KrugmanPipeline(object): 

    def __init(self): 
     connection = MongoClient(settings['MONGODB_SERVER'], settings['MONGODB_PORT']) 
     db = connection[settings['MONGODB_DB']] 
     self.collection = db[settings['MONGODB_BLOG']] 

    def process_item(self, item, spider): 
     self.collection.insert_one(dict(item)) 
     log.msg("Test this out") 
     return item 

私はすべてのエラーメッセージが届かないので、私は、困難のトラブルシューティングを持っています。それはまったく発射を拒否しているようです。私の問題が何であるかについてのどんな考えですか?

+0

私は私のパイプラインオブジェクトが呼び出されているものということから、open_spiderで接続を開き、close_spider方法でそれを閉じますが、その – Erdenezul

答えて

0

設定では、MongoPipelineを追加しませんでした。

ITEM_PIPELINES = { 
    'crawler.pipelines.MongoPipeline': 800, 
    'scrapy.pipelines.images.ImagesPipeline': 300, 
} 
+0

を働くことKrugmanPipeLineは基本的に同じニッチを満たしていない理由を私は覚えていませんか? –

+0

ああ、私はそれを見ていない残念 – Erdenezul

関連する問題