首先我们需要先安装scrapy框架,没有安装的同学可以看ubuntu下安装scrapy网络爬虫框架
创建一个项目
1 进入到想要创建项目的目录: scrapy startproject tutorial
这样就可以创建了一个新的scrapy项目tutorial
2 看一下项目的树形图
tutorial/
scrapy.cfg
tutorial/
__init__.py
items.py
pipelines.py
settings.py
spiders/
__init__.py
...
3 简单的介绍一下每个文件的用处
scrapy.cfg 是项目的配置文件
tutorial/ 是项目的入口
items.py 是项目的数据字段文件
pipelines.py 是项目的管道文件
settings.py 是项目的配置文件
spiders/ 是项目中放网络蜘蛛的目录
定义我们要的数据字段 item
1 定义自己所需要的数据字段是从我们爬取下来的数据中提取的
2 定义字段在items.py中定义Item类来实现的
3 我们在items.py中定义出三个字段,titile和link以及desc
from scrapy.item import Item, Field
class DmozItem(Item):
title = Field()
link = Field()
desc = Field()
创建第一个网络蜘蛛 spider
1 网络蜘蛛是指从用户定义好的一组域中爬取数据
2 要创建一个网络蜘蛛,我们必须在spiders/ 目录下创建一个文件
3 我们创建第一个网络蜘蛛,保存为dmoz_spider.py
from scrapy.spider import BaseSpider
class DmozSpider(BaseSpider):
name = "dmoz"
allowed_domains = ["dmoz.org"]
start_urls = [
"http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
"http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
]
def parse(self, response):
filename = response.url.split("/")[-2]
open(filename, ‘wb‘).write(response.body)
name 是网络蜘蛛的名称,名称要唯一
start_urls 是网络蜘蛛开始爬取的第一个url
parse()函数 是网络蜘蛛爬取后response的对象,负责解析响应数据
运行项目
1 回到这个项目的最顶层运行:scrapy crawl dmoz
2 有如下结果
2014-01-23 18:13:07-0400 [scrapy] INFO: Scrapy started (bot: tutorial)
2014-01-23 18:13:07-0400 [scrapy] INFO: Optional features available: ...
2014-01-23 18:13:07-0400 [scrapy] INFO: Overridden settings: {}
2014-01-23 18:13:07-0400 [scrapy] INFO: Enabled extensions: ...
2014-01-23 18:13:07-0400 [scrapy] INFO: Enabled downloader middlewares: ...
2014-01-23 18:13:07-0400 [scrapy] INFO: Enabled spider middlewares: ...
2014-01-23 18:13:07-0400 [scrapy] INFO: Enabled item pipelines: ...
2014-01-23 18:13:07-0400 [dmoz] INFO: Spider opened
2014-01-23 18:13:08-0400 [dmoz] DEBUG: Crawled (200) (referer: None)
2014-01-23 18:13:09-0400 [dmoz] DEBUG: Crawled (200) (referer: None)
2014-01-23 18:13:09-0400 [dmoz] INFO: Closing spider (finished)
3 运行完这个项目之后,在这个项目tutorial产生两个文件Books和Resources
原文:http://blog.csdn.net/chenguolinblog/article/details/19699865