2013-07-10 6 views
2

Я немного новичок в области скребковые и был в состоянии управлять следующий фрагмент кода для моего паука:Почему Scrapy не загружается?

import os 
os.environ.setdefault('SCRAPY_SETTINGS_MODULE', 'thesentientspider.settings') 
from scrapy.selector import HtmlXPathSelector 
from scrapy.spider import BaseSpider 
from scrapy.http import Request 
from scrapy.utils.response import get_base_url 
from urlparse import urljoin 
from thesentientspider.items import RestaurantDetails, UserReview 
import urllib 
from scrapy.conf import settings 
import pymongo 
from pymongo import MongoClient 

#MONGODB Settings 
MongoDBServer=settings['MONGODB_SERVER'] 
MongoDBPort=settings['MONGODB_PORT'] 

class ZomatoSpider(BaseSpider): 
    name = 'zomatoSpider' 
    allowed_domains = ['zomato.com'] 
    CITY=["hyderabad"] 
    start_urls = [ 
     'http://www.zomato.com/%s/restaurants/' %cityName for cityName in CITY 
     ] 

    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     BASE_URL=get_base_url(response) 

Однако, когда я пытаюсь запустить его через Scrapy ползать zomatoSpider команду, это выдает следующее сообщение об ошибке:

Traceback (most recent call last): 
    File "/usr/bin/scrapy", line 4, in <module> 
    execute() 
    File "/usr/lib/pymodules/python2.6/scrapy/cmdline.py", line 131, in execute 
    _run_print_help(parser, _run_command, cmd, args, opts) 
    File "/usr/lib/pymodules/python2.6/scrapy/cmdline.py", line 76, in _run_print_help 
    func(*a, **kw) 
    File "/usr/lib/pymodules/python2.6/scrapy/cmdline.py", line 138, in _run_command 
    cmd.run(args, opts) 
    File "/usr/lib/pymodules/python2.6/scrapy/commands/crawl.py", line 43, in run 
    spider = self.crawler.spiders.create(spname, **opts.spargs) 
    File "/usr/lib/pymodules/python2.6/scrapy/command.py", line 33, in crawler 
    self._crawler.configure() 
    File "/usr/lib/pymodules/python2.6/scrapy/crawler.py", line 40, in configure 
    self.spiders = spman_cls.from_crawler(self) 
    File "/usr/lib/pymodules/python2.6/scrapy/spidermanager.py", line 35, in from_crawler 
    sm = cls.from_settings(crawler.settings) 
    File "/usr/lib/pymodules/python2.6/scrapy/spidermanager.py", line 31, in from_settings 
    return cls(settings.getlist('SPIDER_MODULES')) 
    File "/usr/lib/pymodules/python2.6/scrapy/spidermanager.py", line 23, in __init__ 
    self._load_spiders(module) 
    File "/usr/lib/pymodules/python2.6/scrapy/spidermanager.py", line 26, in _load_spiders 
    for spcls in iter_spider_classes(module): 
    File "/usr/lib/pymodules/python2.6/scrapy/utils/spider.py", line 21, in iter_spider_classes 
    issubclass(obj, BaseSpider) and \ 
TypeError: issubclass() arg 1 must be a class 

Может кто-нибудь, пожалуйста, указать на причину и предложить изменения для того же с помощью фрагмента кода?

+0

Это весь код вашего паука? У вас есть синтаксическая ошибка в строке с определением 'start_urls'. У вас есть другие пауки в dirctory? – alecxe

+0

@alecxe Вы имеете в виду дополнительную запятую? Редактирование этого. Его не в исходном коде. Должно быть, когда я опубликовал фрагмент. Это начальная часть кода ... остальная часть - это в основном определения синтаксического анализа. Дело в том, что я смог запустить обходчик раньше, но когда я добавил код для обработки соединений MongoDB (MongoClient, settings, et al), он сломался, и я не могу понять, почему. – paari

+0

Хорошо, код, который вы предоставили, выглядит хорошо для меня. У вас есть другие пауки в каталоге? – alecxe

ответ

0
def __init__(self): 

     MongoDBServer=settings['MONGODB_SERVER'] 
     MongoDBPort=settings['MONGODB_PORT'] 
     database=settings['MONGODB_DB'] 
     rest_coll=settings['RESTAURANTS_COLLECTION'] 
     review_coll=settings['REVIEWS_COLLECTION'] 

     client=MongoClient(MongoDBServer, MongoDBPort) 
     db=client[database] 
     self.restaurantsCollection=db[rest_coll] 
     self.reviewsCollection=db[review_coll] 

Это код, который я добавил, чтобы заставить его работать. Надеюсь, поможет.

Смежные вопросы