为了账号安全,请及时绑定邮箱和手机立即绑定

Python爬虫实战-使用Scrapy框架爬取土巴兔(二)

标签:
Python

通过上一篇文章 Python爬虫实战-使用Scrapy框架爬取土巴兔(一)我们对Scrapy有了初步的认识,也准备好了开发环境。接下来我们进入正式的开发环节。


    该篇文章主要讲Scrapy的工程创建配置

    一.创建Scrapy工程

    Scrapy提供Shell命令可以直接创建工程,例如项目名为tubatu,执行命令:

    scrapy startproject tubatu

    创建成功后在pycharm中打开工程,我们能够得到文件夹目录如下:

    https://img1.sycdn.imooc.com//5d58d2db0001db6c03780290.png

    myproject/
        tubatu/         -------该项目的python模块
            spiders/       --------放置spider代码的目录(具体的爬取规则)
                __init__.py
            __init__.py
            items.py       --------项目中的item文件(存放实体类)
            middlewares.py --------项目中的middlewares文件(中间件处理逻辑)
            pipelines.py   --------项目中的pipelines文件(处理实体类的具体处理逻辑)
            settings.py    --------项目的配置文件
        scrapy.cfg         --------项目的配置文件

    二.Scrapy的基本配置

    通过工程的目录文件列表,我们可以看到有名为"scrapy.cfg"、"settings.py"的文件都是关于项目的配https://img1.sycdn.imooc.com//5d58d2e40001645808660421.pngscrapy.cfg

    上面是scrapy.cfg文件中的全部内容,该文件定义了工程的具体配置路径和项目名称。我们不用做太多处理,因为实际上关于工程的配置基本都在settings.py这个文件中。
    下面的代码是settings.py的全部内容:

    # 首先将需要引用到的py文件导入到settings中from tubatu.config import USE_PROXY# Scrapy项目实现的bot的名字(也未项目名称)。 这将用来构造默认 User-Agent,同时也用来log。BOT_NAME = 'tubatu'# Scrapy搜索spider的模块列表。SPIDER_MODULES = ['tubatu.spiders']# 使用 genspider 命令创建新spider的模块。NEWSPIDER_MODULE = 'tubatu.spiders'# 如果启用,Scrapy将会尊重 robots.txt策略。# 开启后RobotsTxtMiddleware中间件过滤所有robots.txt eclusion standard中禁止的request。# 确认该中间件及 ROBOTSTXT_OBEY 设置被启用以确保Scrapy尊重robots.txt。ROBOTSTXT_OBEY = False# Scrapy downloader 并发请求(concurrent requests)的最大值。CONCURRENT_REQUESTS = 12# Twisted模块中Reactor最大线程池数量。REACTOR_THREADPOOL_MAXSIZE = 8# 下载器在下载同一个网站下一个页面前需要等待的时间。该选项可以用来限制爬取速度, 减轻服务器压力。同时也支持小数:DOWNLOAD_DELAY = 0# 如果启用,Scrapy将记录所有在request(Cookie 请求头)发送的cookies及response接收到的cookies(Set-Cookie 接收头)。COOKIES_ENABLED = False# 要激活下载器中间件组件,将其加入到 DOWNLOADER_MIDDLEWARES 设置中。# 该设置是一个字典(dict),键为中间件类的路径,值为其中间件的顺序(order)。DOWNLOADER_MIDDLEWARES = {    'msic.scrapy.middlewares.CustomUserAgentMiddleware': 2,#自定义的http请求中添加请求头的中间件
        'tubatu.middlewares.RedirectionMiddleware': 998,#自定义的重定向的中间件}#CustomHttpProxyMiddleware自定义的http代理中间件#CatchExceptionMiddleware自定义的异常捕获中间件if USE_PROXY:
        DOWNLOADER_MIDDLEWARES['msic.scrapy.middlewares.CustomHttpProxyMiddleware'] = 1
        DOWNLOADER_MIDDLEWARES['msic.scrapy.middlewares.CatchExceptionMiddleware'] = 999# 保存项目中启用的pipeline及其顺序的字典。该字典默认为空,值(value)任意。不过值(value)习惯设定在0-1000范围内。# 注释ITEM_PIPELINES中的内容是因为在Spider中定义了单独每个Spider处理数据需要用的item pipelines,而不是共用一个。# 如果你的item pipelines是Spider可以共用的则可以定义在settings.py中# 举个例子,假如有两个Spider,Spider A在进行数据处理时只想执行的是pipeline A中的方法,Spider B只想执行的是pipeline B中的方法。# 如果在settings.py中定义了的话,pipeline A或者B都会被执行到。这样不是我们想要的结果。# 所以可以在spider中单独定义。可以看第四篇文章的第三节“爬取规则”中的代码。# 代码片段是:# custom_settings = {#     'ITEM_PIPELINES': {#         'tubatu.pipelines.DesignPicturePipeline': 302,#     }# }ITEM_PIPELINES = {    # 'tubatu.pipelines.DesignPicturePipeline': 302}# 部分网站提供了原本只有ajax获取到的数据的纯HTML版本。 网站通过两种方法声明:# 在url中使用 #! - 这是默认的方式;# 使用特殊的meta标签 - 这在”main”, “index” 页面中使用。# 该配置开启时能够爬取经常抓取大量的 “index” 页面# 由于有些性能问题,且对于特定爬虫没有什么意义,所以默认关闭。AJAXCRAWL_ENABLED = False# 是否启用logging。LOG_ENABLED = True# log打印格式LOG_FORMAT = '%(asctime)s,%(msecs)d  [%(name)s] %(levelname)s: %(message)s'

    本文用到的配置只是scrapy所有配置中的部分,更多配置的相关参数可以参考官方文档

    三.项目自定义配置

    细心的同学会发现文中使用了另一个关于配置的python文件——config.py。
    这个文件主要是为了存放自定义的配置。例如:数据库的配置、Redis的配置、以及其他一些控制变量。
    下面是config.py的全部内容:

    import loggingimport redisfrom requests.packages.urllib3.connectionpool import log as requests_logfrom msic.core.service import mongodb_service#设置requests日志等级requests_log.setLevel(logging.WARNING)# RedisREDIS_HOST = '127.0.0.1'REDIS_PORT = 6379REDIS_DATABASE_NAME = 0redis_client = redis.StrictRedis(host=REDIS_HOST, port=REDIS_PORT, db=REDIS_DATABASE_NAME)# MongoDBMONGODB_HOST = "127.0.0.1"MONGODB_PORT = 27017mongodb_client = mongodb_service.get_client(MONGODB_HOST, MONGODB_PORT)
    DATABASE_NAME = "tubatu"mongodb = mongodb_service.get_db(mongodb_client, DATABASE_NAME)# 图片保存路径IMAGES_STORE = 'C:/scrapy'# 是否使用代理USE_PROXY = False

    当然也可以将配置的内容写在文件中,通过读取文件的方式读取配置信息。

    最后

    工程的创建和配置都完成了,接下来我们开始编写中间件Python爬虫实战-使用Scrapy框架爬取土巴兔(三)。因为中间件是项目中所有spider共用的组件,所以要在编写spider的具体规则时就将它确定好。

    附:

    详细的项目工程在Github中,如果觉得还不错的话记得Star哦。



    作者:imflyn
    链接:https://www.jianshu.com/p/95403d6c1305


    点击查看更多内容
    TA 点赞

    若觉得本文不错,就分享一下吧!

    评论

    作者其他优质文章

    正在加载中
    • 推荐
    • 评论
    • 收藏
    • 共同学习,写下你的评论
    感谢您的支持,我会继续努力的~
    扫码打赏,你说多少就多少
    赞赏金额会直接到老师账户
    支付方式
    打开微信扫一扫,即可进行扫码打赏哦
    今天注册有机会得

    100积分直接送

    付费专栏免费学

    大额优惠券免费领

    立即参与 放弃机会
    意见反馈 帮助中心 APP下载
    官方微信

    举报

    0/150
    提交
    取消