首先推荐一个系列教程http://blog.csdn.net/u012150179/article/category/2345511
此篇文章就是根据上边系列中的scrapy研究探索(二)——爬w3school.com.cn学习总结更改而来
1.前期准备
scapy的安装请自行百度,我最开始安装的时候遇到颇多的问题,但大多都是缺少库引起的,所以安装中遇到问题时的中心思想就是看错误提示,缺少什么库就去安装什么库。
在开始之前假设你已经安装好了环境,我们今天要利用scrapy爬取的是w3school的XPath教程中的导航栏如下图:
- 创建项目
|
|
这样就在当前目录中新建了这个项目的目录:
|
|
其中scrapy.cfg是项目的配置文件。主要改写的是w3school中的三个文件以及其中spiders需要新建爬虫文件并编写。
- 在item.py中定义item容器
所谓item容器,就是给将要爬取的项定义一个数据结构,它工作方式像python里面的字典,比如我要爬取文章标题,我要定义一个title=scrapy.Field()
所以item.py中的内容如下:
|
|
- 在pipelines.py中编写W3schoolPipeline实现对item的处理
在其中主要完成数据的查重、丢弃,验证item中数据,将得到的item数据保存等工作。代码如下:
|
|
其中的process_item方法是必须调用的用来处理item,并且返回值必须为Item类的对象,或者是抛出DropItem异常。并且上述方法将得到的item实现解码,以便正常显示中文,最终保存到json文件中。
这里利用到了codecs库,详情可参考http://blog.csdn.net/suofiya2008/article/details/5579413
在编写完pipeline后,为了能够启动它,必须将其加入到ITEM_PIPLINES配置中,即在settings.py中加入下面一句:
|
|
其实上面这个配置在settings.py中已经有了,只不过是注释起来了,你可以将其打开然后将其原来的SomePipiline改成自己定义的就行了。
2.编写爬虫
接下来是编写我们的爬虫文件,在spider文件夹下创建一个新的py文件,我们这里起名为w3school_spider.py
然后下面是这个文件的代码:
|
|
- 此文件的名称可以自己定,但是有一点需要注意就是此文件不能和工程名一样,否则在
from 工程.items import item
是会提示错误无法找到工程.items
,就是上面的from w3school.items import W3SchoolItem
- 属性name即spider唯一名字:开始爬虫时需要用到这个名字;start_url可以理解为爬取入口:从哪个url开始。
- parse()是对Spider类中parse的重写,在它里面定义了爬虫的规则。
- 像我代码中注释所说的,从网上找的很多例子的log功能都是用
from scrapy import log
,由于版本问题它已经deprecated了并提示使用python的内建函数logging。其中的格式化输出请自行搜索。 - scrapy使用选择器Selector并通过XPath实现数据的提取。我这里爬取的就是w3school的xpaht教程的界面,不懂的可以直接在这学习了。
- allowed_domains中规定爬虫只允许分析的url,如果不在这个列表中就不考虑
3.运行
我们的爬虫已经编写完成了,下面开始爬取,进入到项目的目录中,然后如下:
|
|
这是屏幕打印出了很多的log信息,在工程目录下同时产生了两个文件:w3school.log和w3school_utf8.json,结果都在json文件中,如下:
|
|
以上算是scrapy的最简单程序,可以看到什么不懂的就去查什么。
#####此工程的github地址:https://github.com/lowkeynic4/crawl/tree/master/w3school