由于公司项目需求,须要作一个爬虫。因此我一个python小白就被拉去作了爬虫。花了两周时间,拼拼凑凑总算赶出来了。因此写个blog作个记录。
首先,初步要作的就是快速构建一个爬虫。html
1) 直接从官网下载
python下载官网python
2) 是经过brew安装
首先安装xcode
能够选择在App Store安装或者使用xcode-select --install
这个命令安装git
接着安装brewgithub
usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
把这个命令输入终端运行就能够安装了
brew官网docker
接着利用brew安装python3brew install python3
数据库
安装完python3之后,咱们来装scrapy。由于python3是自带pip3的,
因此若是找不到该命令的话,能够去看看python3的安装路径。brew是将其安装在了\usr\local\bin
这个目录下。bootstrap
若是pip没安装上的话,不要慌。咱们还能够经过命令来安装windows
curl -O https://bootstrap.pypa.io/get-pip.py python3 get-pip.py
接下来安装scrapy
输入命令pip3 install Scrapy
就能够了xcode
首先从官网上下载msi文件
在安装选项中勾选上须要pipruby
而后在cmd中输入pip3 install Scrapy
完成
sudo get-apt install python36 python36-devel gcc sudo pip3 install Scrapy
两条命令就搞定了。
由于个人爬虫是跑在docker上,有些镜像可能没有gcc。因此须要devel和gcc,不然有些包会安不上。切记
Redhat系的话,只须要把get-apt
改为yum
就能够了
scrapy startproject demo
scrapy genspider demo_spider www.google.com
scrapy crwal demo_spider
当你创建完项目的时候,scrapy会帮你生成一堆文件。
目录结构是这样的
在你的demo项目中,会有个scrapy.cfg
的配置文件和一个demo
的文件夹
scrapy.cfg
这个文件咱们先暂时不去关心。咱们来关心一下demo
文件夹下的东西
分别是items.py
,middlewares.py
,pipelines.py
,settings.py
和一个spiders
文件夹。
接着咱们去spiders
目录下去建立一个爬虫scrapy genspider demo_spider www.google.com
OK,爬虫生成功了。
咱们来初步解析一下这个爬虫。
有一个DemoSpiderSpider
的类。很明显,这个是咱们刚才生成爬虫的名字为demo_spider而后后面又添加了一个Spider。
接着往下看,有个name的属性,这个属性很重要,咱们到时候启动爬虫的时候,就要经过这个name来告知scarpy
启动的是哪一个爬虫
allowed_demains
是用来指定,咱们只爬取哪些域名下的。好比说,我在爬取google的搜索结果的时候,会爬到不少别的网站,这个属性就是用来告知,除了www.google.com
之外的,我都不爬取。
start_urls
是用来作启动url,看命名就知道了。能够把Scrapy的爬取过程当作一个广度搜索。因此它会先迅速把start_urls
下的全部url
都爬取一遍。而后把结果加入到一个队列中。也是由于这个缘由,因此在作并发爬虫时,会让不一样的爬虫的start_urls
不同。固然还有重复的问题要解决(笑)
接下来就是parse
方法了,咱们对页面的爬取也是在这个parse
中解决
初步理解了spider
,咱们往外层走。
咱们首先来假想几个问题,若是我是Scrapy框架的设计者,我会这么设计这个框架。
既然是通用的爬虫框架,那用户是否是应该能够操做header之类的,让个人每个爬虫都通过代理,或者是设置不一样的cookie。
当当当,因此就有了中间件。middlewares.py
咱们来看看Scrapy
生成的是什么样的。
既然是入门,咱们确定是先关心咱们须要的。看第二张图。有这么几个干方法process_request
,process_response
,process_exception
处理request
,response
,exception
。很好,咱们就要这几个东西。
咱们能够这么理解,咱们的爬虫爬到的每个页面,都会通过这些中间件。
来看看架构图
因此咱们的数据是通过每个中间件。而后中间件来决定去留。
而后咱们来想一想具体process_request
下的状况。
None
spider
了,这个时候,咱们就须要返回一个response
了。request
.这时候只要返回request
。调度器会终止process_request
,而后用这个request
从新开始。raise
一个IgnoreRequest
,也就是,若是你不处理这个异常,这异常就直接扔了。固然,你还能够选择在process_exception
去处理这个异常Python爬虫从入门到放弃(十七)之 Scrapy框架中Download Middleware用法
初步理解了中间件,咱们来讲说items
在spider
处理完数据之后,写入item中,而后就来到了这儿。scrapy
生成的代码
怎么用呢。举个例子,我在spider中须要存储url。因而我在这个文件中就写入url = scrapy.Field
接着在spider
中生成这个item
。而后将item['url'] = url
,在处理完了之后。yield item
完成
这个数据呢,就会交给pipelines
来处理
接着,咱们来看看pipelines
咱们和刚才同样,思考一下,数据拿过来有几种可能。
raise
一个DropItem
就能够了这边呢,若是要写入数据库,玩玩写入的时间特别长,因此推荐使用Twisted
来作一个异步写入
最后。咱们来看看settings
配置文件,好比是否遵照robots.txt之类的。固然,你刚才写的全部middlewares
,pipelines
。都要在这儿注册!!!!随便给它一个不重复的数字就行了