你们好,本篇文章咱们来看一下强大的Python
爬虫框架Scrapy
。Scrapy
是一个使用简单,功能强大的异步爬虫框架,咱们先来看看他的安装。html
Scrapy
的安装是很麻烦的,对于一些想使用Scrapy
的人来讲,它的安装经常就让不少人死在半路。在此我将个人安装过程和网络上整理的安装方法,分享给你们,但愿你们可以安装顺利。若是你在学习Python的过程当中碰见了不少疑问和难题,能够加-q-u-n 227 -435-450里面有软件视频资料免费python
开始以前,咱们要肯定本身安装了Python
,本篇文章咱们以Python3.5
为例。Scrapy
有不少依赖的包,咱们来一一安装。数据库
pip -v
,查看pip
是否安装正常,若是正常,那么咱们进行下一步;pip install wheel
这个包咱们以前的文章介绍过,安装好他咱们就能够安装一些wheel
件;lxml
安装,以前的文章说过他的安装,那么咱们这里在从新整理一下。whl文件地址:here。找到本身对应版本的文件,下载好后,找到文件位置,右键点击文件属性,点击安全标签,复制他的所在路径。打开管理员工具(cmd),pip install <粘贴whl路径>
;PyOpenssl
的whl
文件地址:here。点击下载,whl
文件安装方式同上;Twisted
框架这个框架是一个异步网络库,是Scrapy
的核心。whl
文件地址:here;Pywin32
这是一个Pywin32
兼容的库,下载地址:here,选好版本进行下载;Scrapy
了,pip install scrapy
是否是很麻烦呢,若是你们不喜欢折腾,那么在Windows
下也能够很方便的安装。那就要使用咱们以前提到的Anaconda
了。具体安装你们本身找找,或者在以前的文章中找。那么他的安装Scrapy
只须要一行:json
|
Linux
系统安装起来就要简单一点:浏览器
|
咱们须要先安装一些C++
的依赖库,xcode-select --install
网络
须要安装命令行开发工具,咱们点击安装。安装完成,那么依赖库也就安装完成了。框架
而后咱们直接使用pip
安装pip install scrapy
dom
以上,咱们的Scrapy
库的安装基本上就解决了。
Scrapy
的中文文档地址:here
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 能够应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
他的基本项目流程为:
Scrapy
项目Item
spider
并提取Item
Item Pipeline
来存储提取到的Item
(即数据)而通常咱们的爬虫流程为:
URL
并获得源代码,进行下一步分析;咱们一步一步来看看如何使用。
在开始爬取以前,您必须建立一个新的Scrapy
项目。 进入您打算存储代码的目录中,运行下列命令(以知乎日报为例):
|
该命令将会建立包含下列内容的 zhihu 目录:
|
这些文件分别是:
scrapy.cfg: 项目的配置文件
zhihurb/: 该项目的python模块。以后您将在此加入代码。
zhihurb/items.py: 项目中的item文件.
zhihurb/pipelines.py: 项目中的pipelines文件.
zhihurb/settings.py: 项目的设置文件.
zhihurb/spiders/: 放置spider代码的目录.
这一步是定义咱们须要获取到的数据信息,好比咱们须要得到网站里的一些url
,网站文章的内容,文章的做者等。这一步定义的地方就在咱们的items.py
文件。
|
这一步就是写咱们最熟悉的爬虫了,而咱们的Scrapy
框架可让咱们不须要去考虑实现的方法,只须要写出爬取的逻辑就能够了。
首先咱们须要在 spiders/ 文件夹下建立咱们的爬虫文件,好比就叫spider.py
。写爬虫前,咱们须要先定义一些内容。咱们以知乎日报为例:https://daily.zhihu.com/
|
这里咱们定义了什么呢?首先咱们导入了Scrapy
的Spider
组件。而后建立一个爬虫类,在类里咱们定义了咱们的爬虫名称:zhihu(注意:爬虫名称独一无二的,是不能够和别的爬虫重复的)。还定义了一个网址范围,和一个起始 url 列表,说明起始 url 能够是多个。
而后咱们定义一个解析函数:
|
咱们直接打印一下,看看这个解析函数是什么。
|
因为Scrapy
是不支持在IDE
中执行,因此咱们必须在命令行里执行命令,咱们要肯定是否是cd
到爬虫目录下。而后执行,这里的命令顾名思义,crawl
是蜘蛛的意思,zhihu
就是咱们定义的爬虫名称了。
查看输出,咱们先看到的是一些爬虫类的输出,能够看到输出的log
中包含定义在 start_urls
的初始URL,而且与spider
中是一一对应的。咱们接着能够看到打印出了网页源代码。但是咱们彷佛并无作什么,就获得了网页的源码,这是Scrapy
比较方便的一点。
接着就可使用解析工具解析源码,拿到数据了。
因为Scrapy
内置了CSS
和xpath
选择器,而咱们虽然可使用Beautifulsoup
,可是BeautifulSoup
的缺点就是慢,这不符合咱们Scrapy
的风格,全部我仍是建议你们使用CSS
或者Xpath
。
因为以前我并无写过关于Xpath
或者CSS
选择器的用法,那么首先这个并不难,并且熟悉浏览器的用法,能够很简单的掌握他们。
咱们以提取知乎日报里的文章url
为例:
|
这里咱们使用xpath
解析出全部的url
(extract()是得到全部URL集合,extract_first()是得到第一个)。而后将url
利用yield
语法糖,回调函数给下一个解析url
的函数。
后面详细的组件使用留在下一章讲解,这里假如咱们解析出了文章内容和标题,咱们要将提取的数据保存到item
容器。
Item
对象至关因而自定义的python
字典。 您可使用标准的字典语法来获取到其每一个字段的值。(字段便是咱们以前用Field赋值的属性)。
|
这里咱们须要在管道文件pipelines.py
里去操做数据,好比咱们要将这些数据的文章标题只保留 5 个字,而后保存在文本里。或者咱们要将数据保存到数据库里,这些都是在管道文件里面操做。咱们后面在详细讲解。
那么最简单的存储方法是使用命令行命令:
scrapy crawl zhihu -o items.json
这条命令就会完成咱们的数据保存在根目录的json
文件里,咱们还能够将他格式保存为msv
,pickle
等。改变命令后面的格式就能够了。