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如何使用日志文件记录相关信息
Scrapy进阶教程

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

被折叠的 条评论
为什么被折叠?



