python爬虫框架scrapy学习笔记

来源:互联网 发布:淘宝聚划算下载 编辑:程序博客网 时间:2024/06/02 05:31


http://blog.csdn.net/scopop/article/details/7781316

介绍:scrapy是一个python的爬虫框架 官方英文文档比较完整 支持web2.0

官方文档:doc.scrapy.org

本机环境:ubuntu 12.04

安装命令:

[plain] view plaincopy
  1. sudo easy_install python-twisted  
  2. sudo easy_install w3lib  
  3. sudo easy_install lxml  
  4. sudo easy_install pyopenssl  
  5. sudo easy_install -U Scrapy  
其他系统安装 install

创建tutorial项目

[plain] view plaincopy
  1. scrapy startproject tutorial  
项目结构 可以使用tree命令
[plain] view plaincopy
  1. ├── scrapy.cfg # 配置文件  
  2. └── tutorial  
  3.     ├── __init__.py  
  4.     ├── items.py # 模型文件 类是django的模型  
  5.     ├── pipelines.py # 管道 对items数据进行进一步处理  
  6.     ├── settings.py #配置文件  
  7.     └── spiders # 爬虫文件夹  
  8.         └── __init__.py  

使用命令创建第一个爬虫dmoz(使用模板basic)

[plain] view plaincopy
  1. scrapy genspider -t basic dmoz dmoz.org  
创建成功后 会在爬虫文件夹spiders中出现一个dmoz.py的文件 打开后如下所示
[plain] view plaincopy
  1. from scrapy.spider import BaseSpider  
  2.   
  3. class DmozSpider(BaseSpider):  
  4.     name = "dmoz" # 爬虫名字  
  5.     allowed_domains = ["dmoz.org"]  
  6.     start_urls = (  
  7.         'http://www.dmoz.org/', # 爬虫开始网址  
  8.         )  
  9.   
  10.     def parse(self, response):  
  11.         pass # 网页抓取后 通过该函数处理  
  12.         filename = response.url.split("/")[-2] # 新增测试代码  
  13.         open(filename, 'wb').write(response.body)  

运行

[plain] view plaincopy
  1. scrapy crawl dmoz  
最后会在工程文件夹下生成一个www.dmoz.org的文件 内容为网页代码

scrapy命令解释

[plain] view plaincopy
  1. scrapy -h #查看帮助  
  2. scrapy list #爬虫列表  
  3. scrapy crawl dmoz #运行dmoz爬虫  
  4. scrapy genspider -h #查看genspider帮助信息  
  5. scrapy genspider -l  #查看genspider模板列表  
  6. scrapy genspider -d basic # 查看basic模板结构  
  7. scrapy genspider -t basic test test.com # 指定basic模板生成test爬虫  
scrapy 调试
[plain] view plaincopy
  1. 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

[plain] view plaincopy
  1. class DmozItem(Item):  
  2.     title = Field() # 字段只有这一种Field类型  
  3.     link = Field()  
  4.     desc = Field()  

修改spiders下dmoz.py

[plain] view plaincopy
  1. from scrapy.spider import BaseSpider  
  2. from tutorial.items import DmozItem  
  3. from scrapy.selector import HtmlXPathSelector  
  4.   
  5.   
  6. class DmozSpider(BaseSpider):  
  7.     name = "dmoz"  
  8.     allowed_domains = ["dmoz.org"]  
  9.     start_urls = (  
  10.         'http://www.dmoz.org/Computers/Programming/Languages/Python/Books/',  
  11.         )  
  12.     def parse(self, response):  
  13.         hxs = HtmlXPathSelector(response)  
  14.         sites = hxs.select('//ul/li')  
  15.         items = []  
  16.         for site in sites:  
  17.             item = DmozItem()  
  18.             item['title'] = site.select('a/text()').extract()  
  19.             item['link'] = site.select('a/@href').extract()  
  20.             item['desc'] = site.select('text()').extract()  
  21.             items.append(item)  
  22.         return items  

parse返回Request或者items列表 如果是Request则加入爬虫队列 如果返回items则直接处理或者到pipelines模块处理

Request返回格式 [Request(url, callback=self.parse_item)]

运行爬虫根据Item生成json文件 其他xml cvs等详见文档

[plain] view plaincopy
  1. scrapy crawl dmoz -o items.json -t json  
命令成功会在终端打印信息 并且在工程下生成items.json文件


pipeline

爬虫spider获取的数据 返回Request对象需要进一步抓取链接 而返回Item的则交给pipeline处理

[plain] view plaincopy
  1. class TutorialPipeline(object):  
  2.     def __init__(self):  
  3.         print "first pipeline"  
  4.     def process_item(self, item, spider):# 函数返回item或者raise from scrapy.exceptions import DropItem对象  
  5.         return item# 函数内进行数据的二次处理 当然在parse中也可以处理  
配置settings 可以配置多个 依次执行
[plain] view plaincopy
  1. 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



# 先写到这 其他的有使用经验了 在陆续补充进来


0 0
原创粉丝点击