Scrapy爬虫框架的基本使用 创建spider工程和spider爬虫 scrapy基本命令
Srcapy介绍
Scrapy是一个健壮的爬虫框架,可以从网站中提取需要的数据。是一个快速、简单、并且可扩展的方法。
Scrapy使用了异步网络框架来处理网络通讯,可以获得较快的下载速度,因此,我们不需要去自己实现异步框架。并且,Scrapy包含了各种中间件接口,可以灵活的完成各种需求。所以我们只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页上的各种内容。
Scrapy爬虫的优点很多:
-
内建的css选择器和xpath表达式。
-
基于IPython交互shell,方便编写爬虫和debug。
-
健壮的编码支持。
-
扩展性强,可使用signals和api(中间件,插件,管道)添加自定义功能。
-
多用于session,cookies,http认证,user-agent,robots.txt,抓取深度限制的中间件和插件。
-
scrapy內建teinet console,可用于debug。
Scrapy的安装
scrapy的安装可能回出现问题。
如果安装不成功,先安装 wheel,然后下载twisted:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted,
进入你下载的目录执行:
pip install Twisted-17.1.0-cp35-cp35m-win_amd64.whl,
注意安装的是你选择的whl,而不是我这个。
安装失败,可以换另一个版本的twisted文件再次进行安装
接着使用pip命令安装pywin32,最后安装scrapy,或者设置超时命令直接安装scrapy:
pip install --default-timeout=5000 scrapy
鳄鱼君Ba使用的是2020.1的pycharm,是直接在settings中安装的,第一次没安装上,重试一次就成功了。
Scrapy创建工程
scrapy startproject 工程名字
创建工程之后,会生成一个固定的文件目录,结构如下:
├── mySpider 爬虫总目录
| |── spiders 爬虫文件夹
| ├── __init__.py
│ └── __pycache__
│ ├── __init__.py
│ ├── items.py 项目文件
│ ├── middlewares.py 中间件文件
│ ├── pipelines.py 管道文件
│ ├── __pycache__
│ ├── settings.py 设置文件
└── scrapy.cfg 配置文件
spiders就是爬虫文件夹,创建一个爬虫文件必须要要进到该目录下。爬虫文件可以有多个,爬虫名字不可重复!
在Scrapy爬虫的工程目录中,存在有以下几个文件以及各部分组件的工作:
- 管道文件夹(pipelines):负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。
- 中间件文件(middlewares):包含爬虫中间件和下载器中间件。
- 设置文件(settings):对爬虫文件进行配置。
- 爬虫文件(spiders):在这里编写我们的爬虫文件,需要爬取什么网站。
Scrapy命令整理
1.创建一个新的爬虫项目
scrapy startproject 项目名
2.生成爬虫
scrapy genspider 爬虫名 网址
3.运行爬虫文件
scrapy crawl 爬虫名称
scrapy crawl 爬虫名 -o 文件名.json #保存json文件到本地
4.check检查错误
scrapy check
5.list返回项目所有的爬虫spider名称
scrapy list
6.view,存储,打开网页
scrapy view 网址
7.进入scrapy shell终端
scrapy shell 网址
接下来简单创建一个myspider爬虫项目,并创建myspider爬虫文件:
scrapy startproject myspider1
cd myspider1
scrapy genspider meizi https://www.meizitu.com/
然后会在myspider1文件夹下自动生成一个meizi爬虫文件,内容如下:
# -*- coding: utf-8 -*-
import scrapy
class MeiziSpider(scrapy.Spider):
# name表示爬虫文件的名称,爬虫文件的名称表示的是爬虫问啊进的唯一标识
name = 'meizi'
# 允许的域名:用来做请求的限定,一旦该域名定义好之后,则start_url只可以发起该域名下的url的get请求
allowed_domains = ['www.meizitu.com']
# 起始的url列表:将要爬取的url存放在该列表中,这个列表就可以帮我们将每一个url进行get请求的发送
start_urls = ['https://www.meizitu.com/']
# parse用于数据解析,response参数就是请求回来的相应对象
def parse(self, response):
pass
到这里为止,你已经知道了如何创建一个简单的scrapy工程,那么接下来就是如何运行scrapy爬虫和数据解析,这里你可以自己随便找一个网站进行测试。