from scrapy_redis.spiders import RedisSpider报错

from scrapy_redis.spiders import RedisSpider报错

#get_moive.py
import scrapy
from imooc_movie.items import ImoocMovieItem
from scrapy_redis.spiders import RedisSpider

class GetMoiveSpider(RedisSpider):
    name = 'get_movie'
    # allowed_domains = ['54php.cn']
    # start_urls = ['http://movie.54php.cn/movie/?&p=1']
    redis_key = "get_movie:start_urls"

    def parse(self, response):
        #获取每一页电影的items
        movies_items=response.xpath("//div[@class='col-xs-12 col-sm-6 col-md-4 col-lg-2']")
        for item in movies_items:
            #获取详情页的URL
            detail_url=item.xpath(".//a[@class='thumbnail']/@href").extract_first()
            yield scrapy.Request(url=detail_url,callback=self.parse_detail)
        next_page=response.xpath("//a[@aria-label='Next']/@href").extract_first()
        if next_page:
            next_page_url="http://movie.54php.cn"+next_page
            yield scrapy.Request(url=next_page_url,callback=self.parse)

    def parse_detail(self,response):
        '''
        解析详情页
        :param response:
        :return:
        '''
        moive_info=ImoocMovieItem()
        moive_info["title"]=response.xpath("//div[@class='page-header']/h1/text()").extract_first()
        moive_info["desc"]=response.xpath("//div[@class='panel-body']/p[4]/text()").extract_first()
        moive_info["download_url"]=response.xpath("//div[@class='panel-body']/p[5]/text()").extract_first()
        print(moive_info)
        yield moive_info
#报错信息
C:\python3\python.exe C:\Users\Zhuang\Desktop\imooc\Scrapy_redis分布式爬虫\imooc_movie\main.py
Traceback (most recent call last):
  File "C:\Users\Zhuang\Desktop\imooc\Scrapy_redis分布式爬虫\imooc_movie\main.py", line 2, in <module>
    cmdline.execute("scrapy crawl get_movie".split())
  File "C:\python3\lib\site-packages\scrapy\cmdline.py", line 144, in execute
    cmd.crawler_process = CrawlerProcess(settings)
  File "C:\python3\lib\site-packages\scrapy\crawler.py", line 280, in __init__
    super().__init__(settings)
  File "C:\python3\lib\site-packages\scrapy\crawler.py", line 152, in __init__
    self.spider_loader = self._get_spider_loader(settings)
  File "C:\python3\lib\site-packages\scrapy\crawler.py", line 146, in _get_spider_loader
    return loader_cls.from_settings(settings.frozencopy())
  File "C:\python3\lib\site-packages\scrapy\spiderloader.py", line 67, in from_settings
    return cls(settings)
  File "C:\python3\lib\site-packages\scrapy\spiderloader.py", line 24, in __init__
    self._load_all_spiders()
  File "C:\python3\lib\site-packages\scrapy\spiderloader.py", line 51, in _load_all_spiders
    for module in walk_modules(name):
  File "C:\python3\lib\site-packages\scrapy\utils\misc.py", line 88, in walk_modules
    submod = import_module(fullpath)
  File "C:\python3\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "C:\Users\Zhuang\Desktop\imooc\Scrapy_redis分布式爬虫\imooc_movie\imooc_movie\spiders\get_movie.py", line 4, in <module>
    from scrapy_redis.spiders import RedisSpider
  File "C:\python3\lib\site-packages\scrapy_redis\spiders.py", line 4, in <module>
    from collections import Iterable
ImportError: cannot import name 'Iterable' from 'collections' (C:\python3\lib\collections\__init__.py)

Process finished with exit code 1


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕凡 2022-01-06 15:39:39

同学,你好!

同学将"C:\python3\lib\site-packages\scrapy_redis\spiders.py"文件的from collections import Iterable 改为 from collections.abc import Iterable,(3.6之前的版本是不需要带.abc的),祝学习愉快~

  • 提问者 Cherub1Zhuang #1
    C:\python3\python.exe C:\Users\Zhuang\Desktop\imooc\Scrapy_redis分布式爬虫\imooc_movie\main.py
    2022-01-06 15:45:50 [scrapy.utils.log] INFO: Scrapy 2.5.1 started (bot: imooc_movie)
    2022-01-06 15:45:50 [scrapy.utils.log] INFO: Versions: lxml 4.7.1.0, libxml2 2.9.12, cssselect 1.1.0, parsel 1.6.0, w3lib 1.22.0, Twisted 21.7.0, Python 3.10.1 (tags/v3.10.1:2cd268a, Dec  6 2021, 19:10:37) [MSC v.1929 64 bit (AMD64)], pyOpenSSL 21.0.0 (OpenSSL 1.1.1m  14 Dec 2021), cryptography 36.0.1, Platform Windows-10-10.0.22000-SP0
    2022-01-06 15:45:50 [scrapy.utils.log] DEBUG: Using reactor: twisted.internet.selectreactor.SelectReactor
    2022-01-06 15:45:50 [scrapy.crawler] INFO: Overridden settings:
    {'BOT_NAME': 'imooc_movie',
     'DUPEFILTER_CLASS': 'scrapy_redis.dupefilter.RFPDupeFilter',
     'NEWSPIDER_MODULE': 'imooc_movie.spiders',
     'SCHEDULER': 'scrapy_redis.scheduler.Scheduler',
     'SPIDER_MODULES': ['imooc_movie.spiders'],
     'USER_AGENT': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
                   '(KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'}
    2022-01-06 15:45:50 [scrapy.extensions.telnet] INFO: Telnet Password: f4c7097e4477c541
    2022-01-06 15:45:50 [scrapy.middleware] INFO: Enabled extensions:
    ['scrapy.extensions.corestats.CoreStats',
     'scrapy.extensions.telnet.TelnetConsole',
     'scrapy.extensions.logstats.LogStats']
    2022-01-06 15:45:50 [get_movie] INFO: Reading start URLs from redis key 'get_movie:start_urls' (batch size: 16, encoding: utf-8)
    2022-01-06 15:45:50 [scrapy.middleware] INFO: Enabled downloader middlewares:
    ['scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
     'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
     'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
     'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
     'scrapy.downloadermiddlewares.retry.RetryMiddleware',
     'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
     'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
     'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
     'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',
     'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware',
     'scrapy.downloadermiddlewares.stats.DownloaderStats']
    2022-01-06 15:45:50 [scrapy.middleware] INFO: Enabled spider middlewares:
    ['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
     'scrapy.spidermiddlewares.offsite.OffsiteMiddleware',
     'scrapy.spidermiddlewares.referer.RefererMiddleware',
     'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
     'scrapy.spidermiddlewares.depth.DepthMiddleware']
    2022-01-06 15:45:50 [scrapy.middleware] INFO: Enabled item pipelines:
    ['imooc_movie.pipelines.ImoocMoviePipeline']
    2022-01-06 15:45:50 [scrapy.core.engine] INFO: Spider opened
    Unhandled error in Deferred:
    2022-01-06 15:45:50 [twisted] CRITICAL: Unhandled error in Deferred:
    
    Traceback (most recent call last):
      File "C:\python3\lib\site-packages\scrapy\crawler.py", line 192, in crawl
        return self._crawl(crawler, *args, **kwargs)
      File "C:\python3\lib\site-packages\scrapy\crawler.py", line 196, in _crawl
        d = crawler.crawl(*args, **kwargs)
      File "C:\python3\lib\site-packages\twisted\internet\defer.py", line 1909, in unwindGenerator
        return _cancellableInlineCallbacks(gen)  # type: ignore[unreachable]
      File "C:\python3\lib\site-packages\twisted\internet\defer.py", line 1816, in _cancellableInlineCallbacks
        _inlineCallbacks(None, gen, status)
    --- <exception caught here> ---
      File "C:\python3\lib\site-packages\twisted\internet\defer.py", line 1661, in _inlineCallbacks
        result = current_context.run(gen.send, result)
      File "C:\python3\lib\site-packages\scrapy\crawler.py", line 89, in crawl
        yield self.engine.open_spider(self.spider, start_requests)
    redis.exceptions.AuthenticationError: Authentication required.
    
    2022-01-06 15:45:50 [twisted] CRITICAL: 
    Traceback (most recent call last):
      File "C:\python3\lib\site-packages\twisted\internet\defer.py", line 1661, in _inlineCallbacks
        result = current_context.run(gen.send, result)
      File "C:\python3\lib\site-packages\scrapy\crawler.py", line 89, in crawl
        yield self.engine.open_spider(self.spider, start_requests)
    redis.exceptions.AuthenticationError: Authentication required.

    这个验证在代码里怎么验证


    2022-01-06 15:51:13
  • 同学,你好!

    同学是否settings文件中按照格式设置redis的连接信息

    https://img1.sycdn.imooc.com//climg/61d6a347095255f106050362.jpg

    祝学习愉快~

    2022-01-06 16:08:57
  • 提问者 Cherub1Zhuang 回复 好帮手慕凡 #3

    还是爬取不到数据,数据库没有变化,

    https://img1.sycdn.imooc.com//climg/61d6caf80954508716870300.jpgpycharm一直提示info 0page,老师我把整个程序打包发到1757578369@qq.com这个邮箱了

    2022-01-06 18:58:51
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师