scrapy 框架
- 安装配置scrapy
安装scrapy,需要twisted依赖,所以需要先安装twisted。
- 在命令行输入python获得当前python版本
- 在Python Extension Packages for Windows下载对应版本的whl文件
- 安装wheel
- 进入下载好的.whl文件目录,安装twisted
- 安装scrapy
- 大功告成
- scrapy爬虫框架结构
5个数据模块,两个中间键模块,3个数据流路径
框架入口是spiders,出口是item pipelines
engine,downloader和scheduler都是已有的功能实现
用户只需要编写spiders和item pipelines
其中spiders用来提供需要访问的url链接,同时解析获得的内容 item pipelines模块用来对数据进行后处理
scrapy爬虫框架解析
- engine 整个框架的核心
控制所有模块之间的数据流
根据条件触发事件
- downloader
根据请求下载网页
- schedular
对所有爬取请求进行调度管理
- downloader middleware
- spiders
解析downloader返回的响应(response)
产生爬取项(scrapyed item)
产生额外的爬取请求(request)
- item pipelines
流水线方式处理爬取项
由一组操作顺序组成,类似流水线,每一个操作是一个item pipeline类型
可能操作包括:清理,检验和查重爬取项中的html数据,将数据存储到数据库
- spider middleware
requests库和scrapy爬虫的比较
- 相同点
都可以进行页面请求和爬取
文档丰富,入门简单
都没有处理js,提交表单,应对验证码等功能
- 不同点
requests | scrapy |
---|---|
页面级爬虫 | 网站级爬虫 |
功能库 | 框架 |
并发性不足,性能较差 | 并发性好,性能较高 |
重点在于页面下载 | 重点在于爬虫结构 |
定制灵活 | 一般使用灵活,深度定制困难 |
- 如何选取
简单的可以用requests实现
不太小的需求选用scrapy
自搭框架,建议选用requests
scrapy的常用命令
- scrapy 命令行格式
1 | >scrapy <command>[options][args] |
常用命令 | 说明 | 格式 |
---|---|---|
startproject | 创建新工程 | scrapy startproject[dir] |
genspider | 创建一个爬虫 | scrapy genspider[options] |
settings | 获取爬虫配置信息 | scrapy settings[options] |
crawl | 运行一个爬虫 | scrapy crawl |
list | 列出工程中所有爬虫 | scrapy list |
shell | 启动url调试命令行 | scrapy shell[url] |
- 命令行更加自动化,适合脚本控制
第一个实例
demo网站 https://python123.io/ws/demo.html
文件名:demo.html
- 产生步骤
建立一个爬虫工程 scrapy startproject python123demo
在工程中产生一个爬虫 scrapy genspider demo python123.io
parse()用于处理响应,解析内容形成字典,发现新的url爬取请求
配置产生的爬虫 修改demo.py文件
运行爬虫,获取网页 scrapy crawl demo
如果运行报错no module named “win32api” 则需要安装pywin32模块
使用命令pip installl pypiwin32即可
- 生成的工程目录
yield关键字的使用
yield是一个不断产生值的函数
包含yield语句的函数是一个生成器
生成器每产生一个值(yield),函数就会被冻结,被唤醒后再次产生一个值
- 实例
1 | >>>def gen(n): |
生成器一般和for循环一起使用
- 为何要用生成器
相比于一次列出所有内容
生成器更节省存储空间,响应更迅速,使用更灵活
scrapy爬虫的基本使用
- 创建一个工程和spider模板
- 编写spider
- 编写item pipeline
- 优化配置策略
- 数据类型
- request类 向网络上提交请求的内容
- class scrapy.http.Request()
- Request对象表示一个http请求
- 由spider生成,由downloader执行
- response类 从网络中爬取内容的封装类
- class scrapy.http.Response()
- response对象表示一个http响应
- 由downloader生成,由spider处理
- item类 由spider产生的信息
- class scrapy.item.Item()
- item对象表示从一个html页面中提取的信息内容
- 由spider生成,由item pipeline处理
- item类似字典类型,可以按照字典类型进行操作
- CSS selector 使用
股票数据爬虫
- 建立工程和spider模板
- D:>cd codes
- D:\codes>scrapy startproject baiduStocks
- D:\codes>cd baiduStocks
- D:\codes\baiduStocks>scrapy genspider stocks baidu.com
- 编写spider
- 配置stocks.py文件
- 修改对返回页面的处理
- 修改对新增url爬取请求的处理
- 编写item pipelines
- 配置pipelines.py
- 定义对爬取项(scraped item)的处理类
- 配置ITEM_PIPELINES选项(settings.py)