Ferychen 发表于 2015-11-30 10:39:07

初试python爬虫框架Scarpy

好的工具是成功的开始,最近在研究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


到现在,我们就完成了一个基本的爬虫的实现,可以试试看结果。

ayuhi 发表于 2015-11-30 15:56:12

我也来试试~~~
页: [1]
查看完整版本: 初试python爬虫框架Scarpy