Scrapy Settings级别 & 如何获取settings & 一些可能用到的setting

本文介绍了Scrapy爬虫框架中的配置设置,包括不同设置类型的优先级、如何获取设置值及一些常用设置项,如DNS_TIMEOUT、DOWNLOADER_MIDDLEWARES等。

http://doc.scrapy.org/en/1.0/topics/settings.html

一、有5种类型的Settings,优先级由高到低

1. 命令行选项

使用-s复写设置,如scrapy crawl myspider -s LOG_FILE=scrapy.log

2. 每个spider的setting

scrapy.spiders.Spider.custom_settings属性设置

3. 项目的setting

myproject.settings,项目下的settings文件

4. 每个命令的默认setting

5. 默认setting


二、获取settings值

经常需要在pipeline或者中间件中获取settings的属性,可以通过scrapy.crawler.Crawler.settings属性

class MyExtension(object):

    @classmethod
    def from_crawler(cls, crawler):
        settings = crawler.settings
        if settings['LOG_ENABLED']:
            print "log is enabled!"  

三、一些设置:

1. DNS_TIMEOUT默认60s

2. DOWNLOADER_MIDDLEWARES下载中间件

3. DOWNLOAD_DELAY两次下载的间隔

4. DOWNLOAD_TIMEOUT默认180s

5. DOWNLOAD_MAXSIZE默认1024M

6. LOG_ENABLED

7. LOG_FILE默认是NONE

8. LOG_LEVEL,默认是DEBUG,即打印DEBUG, INFO, WARNING, ERROR,所有LOG信息

9. LOG_STDOUT,默认是false,所有的标准输出是否放在log中

10. MEMDEBUG_ENABLED,默认是false

11. RANDOMIZE_DOWNLOAD_DELAY默认是true, 等待0.5-1.5*DOWNLOAD_DELAY时间,防止被禁

12. USER_AGENT默认是”Scrapy/VERSION (+http://scrapy.org)

### 配置Scrapy项目的MySQL管道 为了在Scrapy项目中设置和配置MySQL管道,可以利用`adbapi.ConnectionPool`来异步操作数据库。这有助于提高爬虫效率并减少阻塞时间[^2]。 #### 创建Pipeline类 创建一个新的Python文件命名为`pipelines.py`,定义一个继承自`object`的类用于处理数据存储逻辑: ```python import pymysql from twisted.enterprise import adbapi class MySQLPipeline(object): @classmethod def from_crawler(cls, crawler): params = dict( host=crawler.settings['MYSQL_HOST'], db=crawler.settings['MYSQL_DBNAME'], user=crawler.settings['MYSQL_USER'], passwd=crawler.settings['MYSQL_PASSWD'], charset='utf8', cursorclass=pymysql.cursors.DictCursor, use_unicode=True, ) dbpool = adbapi.ConnectionPool('pymysql', **params) return cls(dbpool) def __init__(self, dbpool): self.dbpool = dbpool def process_item(self, item, spider): query = self.dbpool.runInteraction(self.do_insert, item) query.addErrback(self.handle_error, item, spider) return item def do_insert(self, cursor, item): insert_sql, params = item.get_insert_sql() cursor.execute(insert_sql, params) def handle_error(self, failure, item, spider): spider.logger.error(failure) ``` 上述代码片段展示了如何通过Twisted框架下的`adbapi.ConnectionPool`建立到MySQL服务器的安全连接,并实现了基本的数据插入功能。 #### 修改settings.py 编辑Scrapy项目的`settings.py`文件,在其中添加如下几项配置以指定目标数据库的信息以及激活刚才编写的pipeline组件: ```python ITEM_PIPELINES = { 'your_project_name.pipelines.MySQLPipeline': 300, } MYSQL_HOST = 'localhost' MYSQL_DBNAME = 'database_name' MYSQL_USER = 'root' MYSQL_PASSWD = '' ``` 这里需要注意替换掉`'your_project_name'`为实际项目名称;同时根据实际情况调整数据库主机地址、用户名密码等参数值[^3]。 #### 定义Item模型中的get_insert_sql方法 为了让每个抓取下来的item能够顺利存入关系型数据库表内,还需要确保每一个item实例都具备返回对应于该记录的一条INSERT语句及其所需绑定变量的能力。可以在items.py里边扩展原有的item类实现此需求: ```python def get_insert_sql(self): sql = """ INSERT INTO table_name (column1, column2,...) VALUES (%s,%s,...); """ data_tuple = ( self["field_value_1"], self["field_value_2"] # Add more fields as necessary... ) return sql, data_tuple ``` 以上就是关于怎样在一个基于Scrapy框架构建的应用程序当中集成MySQL持久化层的具体做法说明。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值