1.什么是scrapy
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。
可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
2.安装scrapy
使用命令 pip install scrapy
1.安装过程中可能会出现的错误:
building 'twisted.test.raiser' extension
error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++
Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools
解决方案:
在网站:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
下载twisted对应版本的whl文件(如我的Twisted-17.5.0-cp36-cp36m-win_amd64.whl),cp后面是
python版本,amd64代表64位,
运行命令:
pip install C:\Users\...\Twisted-17.5.0-cp36-cp36m-win_amd64.whl(下载的位置)
pip install Scrapy
2.如果还报错:
win32
解决方案:
pip install pypiwin32
3.还是报错:
使用anaconda,官网下载anaconda,并安装
打开anaconda
点击environments
点击not installed
输入scrapy
apply
在pycharm中选择anaconda的环境
3.scrapy项目的创建以及运行
1.创建scrapy项目:
在终端输入命令:scrapy startproject + 项目名称
2.项目目录结构:
spiders
__init__.py
自定义的爬虫文件.py 由我们自己创建,是实现爬虫核心功能的文件
__init__.py
items.py 定义数据结构的地方,是一个继承自scrapy.Item的类
middlewares.py 中间件 代理
pipelines.py 管道文件,里面只有一个类,用于处理下载数据的后续处理
默认是300优先级,值越小优先级越高(1-1000)
settings.py 配置文件 比如:是否遵守robots协议,User-Agent定义等
3 创建爬虫文件
(1)跳转到spiders文件夹中
cd 项目名字/项目名字/spiders
(2)scrapy genspider 爬虫文件的名字 域名
4 爬虫文件的介绍
#爬虫文件的名字 用于启动scrapy项目
name = 'bd'
#允许访问域名 如果你访问的域名 不在allowed_domains的里面
#那么不允许访问 注意一般不加http 如果加也不报错
allowed_domains = ['www.baidu.com']
#起始的url 就是你的爬虫文件一运行 就第一次执行的域名
start_urls = ['http://www.baidu.com/']
5 运行scrapy爬虫文件
scrapy crawl 爬虫文件的名字
4.scrapy的架构组成
(1)引擎
自动运行,无需关注,会自动组织所有的请求对象,分发给下载器
(2)下载器
从引擎处获取到请求对象后,请求数据
(3)spiders
Spider类定义了如何爬取某个(或某些)网站。
包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item)。
换句话说,Spider就是您定义爬取的动作及分析某个网页(或者是有些网页)的地方。
(4)调度器
有自己的调度规则,无需关注
(5)管道(Item pipeline)
最终处理数据的管道,会预留接口供我们处理数据
当Item在Spider中被收集之后,它将会被传递到Item Pipeline,一些组件会按照一定的顺序执行对Item的处理。
每个item pipeline组件(有时称之为“Item Pipeline”)是实现了简单方法的Python类。
他们接收到Item并通过它执行一些行为,同时也决定此Item是否继续通过pipeline,或是被丢弃而不再进行处理。
以下是item pipeline的一些典型应用:
1. 清理HTML数据
2. 验证爬取的数据(检查item包含某些字段)
3. 查重(并丢弃)
4. 将爬取结果保存到数据库中
5.scrapy的工作原理:
1. 引擎向spiders索要URL
2. 引擎将要爬取的URL给调度器
3. 调度器会将URL生成请求对象放入到指定的队列中
4. 从队列中出队一个请求
5. 引擎将请求交给下载器进行处理
6. 下载器发送请求获取互联网数据
7. 下载器将数据返回给引擎
8. 引擎将数据再次给到spiders
9. spiders通过xpath解析该数据,得到数据或者URL
10. spiders将数据或者URL给到引擎
11. 引擎判断该解析结果是数据,还是URL,是数据就交给管道(item pipeline)处理,是URL交给调度器处理给到spiders
9. spiders通过xpath解析该数据,得到数据或者URL
10. spiders将数据或者URL给到引擎
11. 引擎判断该解析结果是数据,还是URL,是数据就交给管道(item pipeline)处理,是URL交给调度器处理
两张图可以对比着理解