15highlights for day 16 of Python

Scrapy进阶教程
本文详细介绍了Scrapy框架的高级应用,包括自定义中间件、管道文件、数据去重、日志配置等核心功能,以及如何优化日志输出级别和通过meta传值,适合有一定Scrapy基础的开发者深入学习。

1.如何自定义中间件

from .rand_agent import RandAgent

class MyUserAgentMiddleware(object)

2.如何使自己的中间件生效

‘Job51Spider.middlewares.MyUserAgentMiddleware’: 543

3.如何禁用系统的中间件

scrapy.downloadermiddlewares.useragent.UserAgentMiddleware: None

4.如何自定义管道文件

pipeline,俗称管道文件,用于对爬虫数据进行二次处理

class Job51SpiderPipeline(object)

5.管道文件常用的方法有哪些

构造函数 析构函数 爬虫open 爬虫close

6.scrapy自带有哪些中间件

下载器中间件(Downloader Middleware)和爬虫中间件(Spider Middleware)

7.数据去重的若干方式及优缺点对比

1. 基于内存 参考类属性exists_url

优点:逻辑简单,性能高

缺点:占内存,该方式适用于运行一次的项目

1000000000*20/1000/1000/1000=20G

2. 基于文件

普通文件

优点:程序可以运行多次,逻辑相对简单

缺点:性能不高

数据库

优点:程序可以运行多次,逻辑相对简单

缺点:性能不高, >20G (redis可以缓解性能)

3. 布隆过滤

优点:节省空间,逻辑简单,持久化,读写性能良好

缺点:有误差

原理:

https://www.cnblogs.com/aspnethot/articles/3442813.html

多哈希函数映射的快速查找算法

8.布隆过滤的原理

布隆过滤器 Bloom Filter

原理

如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存起来,然后通过比较确定。链表、树、散列表(又叫哈希表,Hash table)等等数据结构都是这种思路。但是随着集合中元素的增加,我们需要的存储空间越来越大。同时检索速度也越来越慢。

Bloom Filter 是一种空间效率很高的随机数据结构,Bloom filter 可以看做是对 bit-map 的扩展, 它的原理是:

当一个元素被加入集合时,通过 K 个 Hash 函数将这个元素映射成一个位阵列(Bit array)中的 K 个点,把它们置为1。检索时,我们只要看看这些点是不是都是 1 就(大约)知道集合中有没有它了:

如果这些点有任何一个 0,则被检索元素一定不在;

如果都是 1,则被检索元素很可能在。

9.限制scrapy的日志输出级别

通过在setting.py中进行以下设置可以被用来配置logging:

LOG_ENABLED 默认: True,启用logging

LOG_ENCODING 默认: ‘utf-8’,logging使用的编码

LOG_FILE 默认: None,在当前目录里创建logging输出文件的文件名

LOG_LEVEL 默认: ‘DEBUG’,log的最低级别

10.一个字和一个汉字占多少字节

一个字占八个字节

一个汉字占两个字节

11.如何通过meta传值

meta是一个字典,它的主要作用是用来传递数据的,meta = {‘key1’:value1},如果想在下一个函数中取出value1, 只需得到上一个函数的meta[‘key1’]即可, 因为meta是随着Request产生时传递的,下一个函数得到的Response对象中就会有meta,即response.meta.

12.如何动态根据item生成创建表语句和插入语句

导from …items import JobItem

13.管道文件如何读取settings中的相关配置

def from_settings(cls, settings):

db_name = settings[‘DB_NAME’]

return cls(db_name)

14.日志文件的五个级别

日志文件的五个级别

CRITICAL - 严重错误(critical)

ERROR - 一般错误(regular errors)

WARNING - 警告信息(warning messages)

INFO - 一般信息(informational messages)

DEBUG - 调试信息(debugging messages)

15.scrapy如何使用日志文件记录相关信息

在程序中导入logging模块,对需要输出的内容进行log日志输出

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值