Well to start with you have bad practices in your imports. It's recommended to stay away from using `from module import *` because doing that imports things without explicitly declaring their names. Without realising it, you could be overwriting other functions, including builtins in the module was made carelessly. Instead use just `import module` or `from module import func1, func2, CONST`. Especially though, don't do this: import oxygendemo.utilities from oxygendemo.utilities import * It's totally redundant to have the first line since you're then ignoring it to import everything. In case you don't know, you can still alias plain imports: import oxygendemo.utilities as util So you don't even need to worry about the name being too long. Also `OxygenSpider` is not laid out properly. You have loose code that should probably be in an `__init__` function. Let me show you how this works in the interpreter: >>> class A: print "Printing class A" Printing class A So what happened there? The `print` command was run when the class was created. I haven't created any object yet, so what happens when I create an object: >>> A() <__main__.A instance at 0x0000000002CA5588> >>> b = A() >>> Nothing. It's not printing the command that you intended to appear when creating an `OxygenSpider` object. If you were to wrap it in `__init__` though, it would. `__init__` is a special function that runs when a new object is created, like so: >>> class A: def __init__(self): print "Printing this object" >>> A() Printing this object <__main__.A instance at 0x0000000002113488> >>> b = A() Printing this object You see now? Nothing happens after the class is created but when actual objects are created `__init__` gets run. You should be putting the whole opening block to `OxygenSpider` in a function like that. Also the variables should be assigned as `self.var`, and the constants should be in UPPER_SNAKE_CASE and constant lists should be tuples instead. Tuples are made with `()` and are basically like lists except they cannot be changed. However since you're inheriting from `SitemapSpider` you also need to run its `__init__` function in yours. You need to call it so that your base class is initialised before you run your particular `__init__` code. There's a good explanation in this [Stack Overflow answer](https://stackoverflow.com/a/6381701/4374739) class OxygenSpider(SitemapSpider): def __init__(self): super(SitemapSpider, self).__init__() print 'MY SPIDER, IS ALIVE' self.NAME = "oxygen" self.ALLOWED_DOMAINS = ("oxygenboutique.com") self.SITEMAP_URLS = ('http://www.oxygenboutique.com/sitemap.xml') self.sitemap_rules = generate_sitemap_rules() self.ex_rates = get_exchange_rates() Also printing when creating an object just to say it's created isn't very nice anyway, you should remove that.