python爬虫框架scrapy学习笔记

介绍: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
其他系统安装  install


创建tutorial项目

scrapy startproject tutorial

项目结构 可以使用tree命令

├── 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
创建成功后 会在爬虫文件夹spiders中出现一个dmoz.py的文件 打开后如下所示
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
最后会在工程文件夹下生成一个www.dmoz.org的文件 内容为网页代码


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 调试

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
命令成功会在终端打印信息 并且在工程下生成items.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中也可以处理
配置settings 可以配置多个 依次执行
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
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值