| 
 | 
 
好的工具是成功的开始,最近在研究python的爬虫框架,瞄上了Scarpy。也在此简单分享一下: 
 
一、Scarpy简介 
Scrapy 是一个快速的高层次的屏幕抓取和网页爬虫框架,爬取网站,从网站页面得到结构化的数据,它有着广泛的用途,从数据挖掘到监测和自动测试,Scrapy完全用Python实现,完全开源,代码托管在Github上,可运行在Linux,Windows,Mac和BSD平台上,基于Twisted的异步网络库来处理网络通讯,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片。 
 
二、Scrapy安装 
习惯使用python的朋友,对pip一定不陌生,使用pip即可快速安装。 
pip install Scrapy 
 
或者,使用easy_install安装: 
easy_install Scrapy 
 
三、定制自己的爬虫开发(简介) 
1、切换到文件目录,开启新的工程: 
scrapy startproject test 
 
2、这个命令会在当前目录下创建一个新目录test,结构如下: 
test/   
   scrapy.cfg      
   test/   
       __init__.py   
       items.py   
       pipelines.py   
       settings.py   
       spiders/   
           __init__.py  
 
scrapy.cfg: 项目配置文件 
items.py: 需要提取的数据结构定义文件 
pipelines.py: 管道定义,用来对items里面提取的数据做进一步处理,如保存等 
settings.py: 爬虫配置文件 
spiders: 放置spider的目录 
 
3、定义Item 
在items.py里面定义我们要抓取的数据: 
from scrapy.item import Item, Field   
 
class TestItem(Item):   
   title = Field()   
   link = Field()   
   desc = Field()   
from scrapy.item import Item, Field class DmozItem(Item):   title = Field()   link = Field()   desc = Field() 
 
这里我们需要获取目标页面上的标题,链接,描述,所以定义一个对应的items结构,不像Django里面models的定义有那么多种类的Field,这里只有一种就叫Field(),再复杂就是Field可以接受一个default值。 
 
4、实现Spider 
spider只是一个继承字scrapy.spider.BaseSpider的Python类,有三个必需的定义的成员 
name:名字,这个spider的标识 
start_urls:一个url列表,spider从这些网页开始抓取 
parse():一个方法,当start_urls里面的网页抓取下来之后需要调用这个方法解析网页内容,同时需要返回下一个需要抓取的网页,或者返回items列表 
所以在spiders目录下新建一个spider,test_spider.py: 
 
class TestSpider(BaseSpider):   
   name = "cnbeta.com"   
   start_urls = [  'http://www.cnbeta.com'   ]   
         
    rules = ( 
 
Rule ( SgmlLinkExtractor ( allow = ( ‘/articles/.*\.htm’ , ) ) , 
 
callback = ‘parse_page’ , follow = True ) , 
 
) 
 
def parse_page ( self , response ) : 
 
item = CnbetaItem ( ) 
 
sel = Selector ( response ) 
 
item [ 'title' ] = sel . xpath ( ‘//title/text()’ ) . extract ( ) 
 
item [ 'url' ] = response . url 
 
return item 
 
5、运行爬虫 
 
scrapy crawl cnbeta - o result .json - t json 
 
将结果输出到result.json -t json指定文件格式为json 
 
 
到现在,我们就完成了一个基本的爬虫的实现,可以试试看结果。 
 
 |   
 
 
 
 |