scrapy:exceptions.AttributeError:'unicode'对象没有属性'dont_filter'

pad*_*pad 5 python scrapy

一头雾水,我得到了错误exceptions.AttributeError: 'unicode' object has no attribute 'dont_filter'。在四处搜寻之后,我发现了这个答案(这是有意义的,因为这是我在得到错误之前修改的唯一代码),是根据我的代码进行修改的。我更改start_request为在列表中产生值,而不是整个重新生成,但仍然可以使用。有任何想法吗?

def start_requests(self):
    connection = pymongo.Connection(settings['MONGODB_SERVER'],
                                    settings['MONGODB_PORT'])
    db = connection[settings['MONGODB_DB']]
    collection = db[settings['MONGODB_COLLECTION']]
    for el in [i['url'] for i in collection.find({}, {'_id':0, 'url':1})]:
        yield el
Run Code Online (Sandbox Code Playgroud)

我检查了代码的其他部分,以确认其他一切都很好。

追溯:

[-] Unhandled Error
    Traceback (most recent call last):
      File "/home/myName/scrapy-test/venv/local/lib/python2.7/site-packages/scrapy/crawler.py", line 93, in start
        self.start_reactor()
      File "/home/myName/scrapy-test/venv/local/lib/python2.7/site-packages/scrapy/crawler.py", line 130, in start_reactor
        reactor.run(installSignalHandlers=False)  # blocking call
      File "/home/myName/scrapy-test/venv/local/lib/python2.7/site-packages/twisted/internet/base.py", line 1192, in run
        self.mainLoop()
      File "/home/myName/scrapy-test/venv/local/lib/python2.7/site-packages/twisted/internet/base.py", line 1201, in mainLoop
        self.runUntilCurrent()
    --- <exception caught here> ---
      File "/home/myName/scrapy-test/venv/local/lib/python2.7/site-packages/twisted/internet/base.py", line 824, in runUntilCurrent
        call.func(*call.args, **call.kw)
      File "/home/myName/scrapy-test/venv/local/lib/python2.7/site-packages/scrapy/utils/reactor.py", line 41, in __call__
        return self._func(*self._a, **self._kw)
      File "/home/myName/scrapy-test/venv/local/lib/python2.7/site-packages/scrapy/core/engine.py", line 120, in _next_request
        self.crawl(request, spider)
      File "/home/myName/scrapy-test/venv/local/lib/python2.7/site-packages/scrapy/core/engine.py", line 176, in crawl
        self.schedule(request, spider)
      File "/home/myName/scrapy-test/venv/local/lib/python2.7/site-packages/scrapy/core/engine.py", line 182, in schedule
        return self.slot.scheduler.enqueue_request(request)
      File "/home/myName/scrapy-test/venv/local/lib/python2.7/site-packages/scrapy/core/scheduler.py", line 48, in enqueue_request
        if not request.dont_filter and self.df.request_seen(request):
    exceptions.AttributeError: 'unicode' object has no attribute 'dont_filter'
Run Code Online (Sandbox Code Playgroud)

Dav*_*son 5

start_requests应该产生单个Request对象,而不仅仅是单个URL。但是el代码中的每个显然都是URL。尝试改变

yield el
Run Code Online (Sandbox Code Playgroud)

yield self.make_requests_from_url(el)
Run Code Online (Sandbox Code Playgroud)

(有关此示例,请参见您链接到的问题)