http://blog.csdn.net/scopop/article/details/7781316
介绍:scrapy是一个python的爬虫框架 官方英文文档比较完整 支持web2.0
官方文档:doc.scrapy.org
本机环境:ubuntu 12.04
安装命令:
- sudo easy_install python-twisted
- sudo easy_install w3lib
- sudo easy_install lxml
- sudo easy_install pyopenssl
- sudo easy_install -U Scrapy
创建tutorial项目
- scrapy startproject tutorial
- ├── scrapy.cfg # 配置文件
- └── tutorial
- ├── __init__.py
- ├── items.py # 模型文件 类是django的模型
- ├── pipelines.py # 管道 对items数据进行进一步处理
- ├── settings.py #配置文件
- └── spiders # 爬虫文件夹
- └── __init__.py
使用命令创建第一个爬虫dmoz(使用模板basic)
- scrapy genspider -t basic dmoz dmoz.org
- from scrapy.spider import BaseSpider
- class DmozSpider(BaseSpider):
- name = "dmoz" # 爬虫名字
- allowed_domains = ["dmoz.org"]
- start_urls = (
- 'http://www.dmoz.org/', # 爬虫开始网址
- )
- def parse(self, response):
- pass # 网页抓取后 通过该函数处理
- filename = response.url.split("/")[-2] # 新增测试代码
- open(filename, 'wb').write(response.body)
运行
- scrapy crawl dmoz
scrapy命令解释
- scrapy -h #查看帮助
- scrapy list #爬虫列表
- scrapy crawl dmoz #运行dmoz爬虫
- scrapy genspider -h #查看genspider帮助信息
- scrapy genspider -l #查看genspider模板列表
- scrapy genspider -d basic # 查看basic模板结构
- scrapy genspider -t basic test test.com # 指定basic模板生成test爬虫
- scrapy shell http://www.dmoz.org/ # 通过shell交互的方式
通过xPath的方式解析网页
xPath教程地址 http://www.w3school.com.cn/xpath/index.asp 可通过shell方式进行测试练习
定义模型 修改items.py文件 关于模型的操作详见文档 http://doc.scrapy.org/en/0.14/topics/items.html
- class DmozItem(Item):
- title = Field() # 字段只有这一种Field类型
- link = Field()
- desc = Field()
修改spiders下dmoz.py
- from scrapy.spider import BaseSpider
- from tutorial.items import DmozItem
- from scrapy.selector import HtmlXPathSelector
- class DmozSpider(BaseSpider):
- name = "dmoz"
- allowed_domains = ["dmoz.org"]
- start_urls = (
- 'http://www.dmoz.org/Computers/Programming/Languages/Python/Books/',
- )
- def parse(self, response):
- hxs = HtmlXPathSelector(response)
- sites = hxs.select('//ul/li')
- items = []
- for site in sites:
- item = DmozItem()
- item['title'] = site.select('a/text()').extract()
- item['link'] = site.select('a/@href').extract()
- item['desc'] = site.select('text()').extract()
- items.append(item)
- return items
parse返回Request或者items列表 如果是Request则加入爬虫队列 如果返回items则直接处理或者到pipelines模块处理
Request返回格式 [Request(url, callback=self.parse_item)]
运行爬虫根据Item生成json文件 其他xml cvs等详见文档
- scrapy crawl dmoz -o items.json -t json
pipeline
爬虫spider获取的数据 返回Request对象需要进一步抓取链接 而返回Item的则交给pipeline处理
- class TutorialPipeline(object):
- def __init__(self):
- print "first pipeline"
- def process_item(self, item, spider):# 函数返回item或者raise from scrapy.exceptions import DropItem对象
- return item# 函数内进行数据的二次处理 当然在parse中也可以处理
- ITEM_PIPELINES = ['tutorial.pipelines.TutorialPipeline', 'tutorial.pipelines.xxx', ]
scrapy日志
分五个级别 默认最低 LOG_LEVEL=‘DEBUG’ 信息会全部打印在终端 官网日志链接
scrapy Stats 键值数据库
支持简单的数据操作 http://doc.scrapy.org/en/0.14/topics/stats.html
支持mail邮件发送 http://doc.scrapy.org/en/0.14/topics/email.html
下载图片 http://doc.scrapy.org/en/0.14/topics/images.html
中间件 http://doc.scrapy.org/en/0.14/topics/downloader-middleware.html
# 先写到这 其他的有使用经验了 在陆续补充进来