|
好的工具是成功的开始,最近在研究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
到现在,我们就完成了一个基本的爬虫的实现,可以试试看结果。
|
|