grab.spider tricks.
1) Дефолтный valid_status для всех заданий. Нужно переопределить метод valid_response_code, например таким образом:
def valid_response_code(self, code, task): return True
В данном примере все ответы будут считаться валидными.
2) Список стартовых урл, initial_urls, может оказаться просто ненужным. Чтобы не делать лишнее действие, можно запускать spider не через task_initial, а через task_generator:
class MainSpider(Spider): #initial_urls = ['http://www.google.com/'] def task_generator(self): url = "http://www.google.com/" yield Task(name='page', url=url)
Это один из способов, но далеко не единственный.