Scrapy学习笔记

PythonScrapy是一个非常方便的web抓取框架,由于个人在本学期才初步接触Python,学习过程中更多是秉承着实用的原则来进行学习,主要自学了用Python设计网页爬虫的部分,其中也被正则表达式弄得稀里糊涂(感觉正则表达式和编译原理一样,都是人类顶级大脑的智慧结晶,但短期内难以上升到非常深入的理解高度),所幸Scrapy提供了一种非常好的抓取框架,这里将自己的近来的一点学习体会加以归纳总结。

参考:Scrapy官方文档: http://scrapy-chs.readthedocs.org/zh_CN/latest/intro/tutorial.html

C工作室视频: http://blog.fishc.com/4015.html (该视频也是基于官方文档的范例,但更有趣味性,学习曲线相对较低)

 

个人归纳:

使用Scrapy抓取一个网站分为4个步骤:(在这之前Scrapy的安装也较为繁琐,但这不是本文想讨论的,暂且按下不表。)

--创建一个Scrapy项目

--定义一个Item容器

--编写爬虫来获取数据

--存储数据

 

创建一个Scrapy项目

由于是初学,为了不带来过多定位上的困扰,我们可以先在CMD命令下定位到桌面,然后创建一个Scrapy项目,Scrapy项目的创建命令为:

scrapy startproject tutorial

这个时候我们的桌面上就会生成一个名为”tutorial”的文件夹了,第一步就这么完成了(万里长征已经迈出第一步了),这时我们可以观察一下这个生成的文件夹,其结构是下面这样的,(大致理解后我们进入下一步)

Scrapy学习笔记_第1张图片

 

 

定义一个Item容器

所谓Item容器就是保存爬取到的数据的容器,我们首先需要对希望获取的数据建模,所谓Learing by Doing,我们也通过范例的dmoz网站(稍后再类比到我们需要爬取的新闻模块上来)来进行实践,我们希望于dmoz中获取资源的名字,URL以及对该网站的描述三个字段,为此,我们修改item.py(项目已生成)来进行建模(顺便改一下类名),按照其注释的样式修改即可:

Scrapy学习笔记_第2张图片

 

编写爬虫来获取数据

Spider是用户编写用于从单个网站(或者一些网站)爬取数据的类,在我们的spiders文件夹中,我们先来创建一个名为”dmoz_spider.py”python文件,其代码和个人列举的注释如下(用英文避免编码问题)

Scrapy学习笔记_第3张图片

好了,所谓爬取爬取,先爬后取,到这一步我们的爬数据的工作就做完了,这个时候我们在命令行下切换到我们的tutorial目录(即项目目录),输入以下指令:

scrapy crawl dmoz

(:dmoz为我们定义的爬虫名,上面已经提到过。)

这个时候就可以看到输出了,可以看到网页状态连接成功等信息,这个时候我们在文件的根目录下,可以看到BooksResources两个文件,打开发现这就是我们制定两个URL的网页源码,这是因为我们在上述Python程序中已经指定两个初始化URL,之后简单理解就是我们写的paser函数去对这两个URL进行解析,返回两个文件,并把接收到的文件写进去;

 

以上就是爬的过程了,之后就是取的过程了,这里我又想多嘴两句,用正则表达式来配网页源码实在是一个非常天才的发明,然而经典的东西往往是深奥的,就数据仓库作业中使用正则来配对获取电影名的经历,感觉要用好这一利器还是要有很多功课要做。

那么回到我们的ScrapyScrapy使用了一种基于 XPath CSS 表达式机制。

Scrapy学习笔记_第4张图片

(或许这张图可以有一点感性理解,更多内容请参考: http://www.w3school.com.cn/xpath/index.asp)

我们通过以下指令来进入Shell:

scrapy shell "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/"

这个时候shell会有一系列的输出,我们这个时候就进入shell界面了,这个时候就可以输入一些解析规则来获取数据了:

Scrapy学习笔记_第5张图片

使用Item并保存数据

Scrapy学习笔记_第6张图片

更改我们的dmoz_spider.py代码,就可以将我们的item联系起来了,我们最后一json作为数据格式,输入指令:

scrapy crawl dmoz -o items.json

 

即可获得一个包含标题,URL和描述的例子,爬取成功啦!

 


你可能感兴趣的:(Scrapy学习笔记)