2017-09-12 2 views
1

Pymongo를 통해 스크램블 파이프 라인을 사용하여 MongoDB에 연결하려고합니다. 새 데이터베이스를 생성하고 방금 긁어 낸 것으로 채 웁니다.하지만 이상하게 작동합니다. 발행물. 나는 기본적인 튜토리얼을 따르고 2 개의 커맨드 라인을 설정했다. 하나는 치료를 실행하고 다른 하나는 mongod를 실행하는 것이다. 불행히도 mongod를 실행 한 후 치료 코드를 실행하면 mongod가 설정하려고하는 치료 용 파이프 라인에서 픽업하지 않는 것처럼 보이며 '포트 27107에서 연결 대기'알림을 유지합니다.(Sc 3) : Scongon MongoDB 파이프 라인이 작동하지 않습니다.

명령 줄에서

1 (scrapy가) 나는 문서로 디렉토리를 설정하는 것은/내가 문서/PyProjects/트위터 봇으로 설정 PyProjects/트위터 봇/크루그먼 명령 줄에서

2 (mongod)

스크립트 나 나 다음과 같이 사용하고 있습니다 : 크루그먼/크루그먼/거미/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