Scrapy爬虫框架
Scrapy不是一个函数功能库而是一个爬虫框架
1.Scrapy爬虫框架结构
- 爬虫框架
- 爬虫框架是实现爬虫功能的一个软件结构和功能组件集合。
- 爬虫框架是一个半成品,能够帮助用户实现专业网络爬虫。
“5+2”结构
2.Scrapy爬虫框架解析
不需修改的部分
Downloader Middleware(中间键)
- 目的:实施Engine、Scheduler和Downloader之间进行用户可配置的控制
- 功能:修改、丢弃、新增请求或响应
用户可以编写配置代码
用户编写的部分
Spider Middleware(中间键)
- 目的:对请求和爬取项的再处理
- 功能:修改、丢弃、新增请求或爬取项
用户可以编写配置代码
3.requests库和Scrapy爬虫的比较
选取爬虫的依据:
- 非常小的需求,requests库。
- 不太小的需求,Scrapy框架。
- 定制程度很高的需求(不考虑规模),自搭框架,requests>Scrapy.
4.Scrapy爬虫的常用命令行
5.Scrapy爬虫的一个实例
demo网页 http://python123.io/ws/demo.html
步骤:
- 建立一个Scrapy爬虫工程
- 在工程中产生一个Scrapy爬虫
- 配置产生的spider爬虫
命令行中输入:
1) 建立工程:> scrapy startproject python123demo
2)生成爬虫(也可以手动生成) >cd python123demo;
>scrapy genspider demo python123.io
yield关键字的使用
生成器相比一次列出所有内容的优势
- 更节省存储空间
- 响应更迅速
- 使用更灵活
#生成器
def gen(n):
for i in range(n):
yield i**2
for i in gen(5):
print(i, " ",end="")#关键字end可以用于将结果输出到同一行,或者在输出的末尾添加不同的字符,此处为空格
#普通写法
def square(n):
ls = [i**2 for i in range(n)]
return ls
for i in square(5):
print(i, " ", end="")
输出结果:
0 1 4 9 16 0 1 4 9 16
- yield 生成器每次只返回一个值进行操作,而普通写法需要返回全部值,当数值较大时,占用大量存储空间。