本文从一个基础案例入手,较为详细的分析了scrapy项目的建设过程(在官方文档的基础上做了调整)。主要内容如下:

0、准备工作

1、scrapy项目结构

2、编写spider

3、编写item.py

4、编写pipelines.py

5、设置Settings.py

6、运行spider

0、准备工作

安装scrapy,在cmd中输入命令(windows)即可完成:pipinstall scrapy

1、scrapy项目结构

建立scrapy项目,在cmd中输入命令(windows):scrapystart project tutorial。项目的目录结构如下。

tutorial/

scrapy.cfg

tutorial/

__init__.py

items.py

pipelines.py

settings.py

spiders/

__init__.py

myspider.py

一般来说,要完成一个能用的scrapy爬虫,需要编写或者配置的文件包括myspider.py、settings.py、item.py和pipeline.py。其中myspider.py在spider目录下,是核心的爬虫文件;settings.py用来配置爬取时间间隔等参数;item.py用来定义数据提取的项目;pipeline.py和item.py配合使用,用来辅助完成爬取数据的格式化输出。

2、编写spider.py

spider文件可以自行命名,此处的爬虫文件名为dmoz_spider.py。该文件定义了爬虫名称、目标网址、执行函数等。以下是spider代码示例,它定义了爬虫名称name,允许运行域allowed_domain,起始爬取页面网址start_urls,parse(self, response)是spider必须实现的接口,负责提取页面中title、href和desc等属性,详细内容可参考以下代码注释。

# -*- coding:utf-8 -*-
import scrapy
from tutorial.itemsimport DmozItem classDmozSpider(scrapy.Spider):
name = 'dmoz' #爬虫名,供命令scrapycrawl domz使用
allowed_domain = 'dmoz.org' #允许爬虫运行的域
start_urls =['http://www.dmoz.org/Computers/Programming/Languages/Python/Books/',
'http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/']#爬取url def parse(self, response): #页面解析函数,这里必须为parse()
for sel in response.xpath('//ul/li'):
item = DmozItem() #在items.py中定义的需解析项目
item['title'] =sel.xpath('a/text()').extract() #使用xpath提取特定属性
item['href'] =sel.xpath('a/@href').extract()
item['desc'] =sel.xpath('text()').extract()
yield item

3、编写item.py

应该引起注意的是:item.py和dmoz_spider.py是相互关联的;Item.py中定义的title、link和desc,在dmoz_spider.py中将会用到。

# -*- coding:utf-8 -*-
# 定义爬取对象属性
import scrapy
classDmozItem(scrapy.Item):
title = scrapy.Field()
link = scrapy.Field()
desc = scrapy.Field()
pass

4、编写pipelines.py

pipelines是scrapy提供的数据导出手段之一,通过pipelines可以进行复杂的数据导出操作,包括将数据导出到json文件或者数据库。pipelines.py中必须实现process_item(self, item, spider)接口,用于处理需要保存的item数据,其中spider为所定义的爬虫dmoz。

pipelines.py代码见下文,其中技术要点有:

1)使用codecs.open()以给定的模式mode和编码encoding打开文件,文件不存在时则新建。

2)使用json.dumps()将dict转化为json格式的字符串,如果ensure_ascii设为False,则返回值将会是Unicode格式。

import json
import codecs
#写pipeline时需要注意编码问题的处理
class dmozPipeline(object):
def __init__(self):
self.file = codecs.open('dmoz.json', mode='wb',encoding='utf-8')
def process_item(self, item, spider):
line = json.dumps(dict(item), ensure_ascii=False)+'\n'# ensure_ascii=False很重要
self.file.write(line)
return item
def close_spider(self,spider):
self.file.close()

补充:另一种替代的数据导出方式是:在cmd中运行scrapycrawl dmoz –o abc.json,其中abc.json为导出文件。采用该方式无需配置pipeline,因为程序执行过程中不会用到。

5、设置Settings.py

通过settings告知spider将启用pipeline,其余用默认设置就好了。

ITEM_PIPELINES = {
'tutorial.pipelines.dmozPipeline': 300,
}

6、运行spider项目

在cmd中运行scrapycrawl dmoz,可以将爬取的所有结果以json格式导出到名为dmoz.json的文件中,文件名可以在pipeline.py中修改。

至此,一个完整的scrapy爬虫项目就算完成了。

爬虫系列2:scrapy项目入门案例分析的更多相关文章

  1. ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区

    原文:ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 入门案例分析 在第一章里,我们已经对ArcGIS系列软件的体系结构有了一 ...

  2. mybatis入门案例分析

    mybatis入门案例分析 一.设计模式分析 public class MybatisTest { public static void main(String[] args) throws Exce ...

  3. 联想ERP项目实施案例分析(10):回到最初再反思IT价值

    联想ERP项目实施案例分析(10):回到最初再反思IT价值 投入上千万(未来每年的维护费也非常高),投入一年实施时间,高级副总裁亲自挂帅,各级业务部门管理者亲自负责.骨干业务人员充当区域IT实施者/推 ...

  4. [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍

    前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...

  5. Python爬虫——Scrapy整合Selenium案例分析(BOSS直聘)

    概述 本文主要介绍scrapy架构图.组建.工作流程,以及结合selenium boss直聘爬虫案例分析 架构图 组件 Scrapy 引擎(Engine) 引擎负责控制数据流在系统中所有组件中流动,并 ...

  6. 5、爬虫系列之scrapy框架

    一 scrapy框架简介 1 介绍 (1) 什么是Scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能 ...

  7. python爬虫系列:Scrapy安装与使用

    这篇博文主要写Scrapy框架的安装与使用 Scrapy框架安装 命令行进入C:\Anaconda2\Scripts目录,运行:conda install Scrapy 创建Scrapy项目 1)进入 ...

  8. spring入门案例分析及原理

    Springmvc执行原理: 一. 入门案例的执行流程 1. 当启动Tomcat服务器的时候,因为配置了load-on-startup标签,所以会创建DispatcherServlet对象,就会加载s ...

  9. 爬虫系列之Scrapy框架

    一 scrapy框架简介 1 介绍 (1) 什么是Scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能 ...

随机推荐

  1. 2018 USP Try-outsF - Optimizing Transportation in Portugal

    题意:给你一副无向图,求使s到t删掉一条的最短路最大的长度 题解:先预处理s,t到每个点的最短路,二分答案,对于一条边,如果选中这条边,那么对于s->u+u->v+v->t或者s-& ...

  2. 【Oracle】【4】mybatis insert/update 数据后返回关键字段

    1,插入 insert 场景:ID字段的值是数据库表“默认/表达式”(sys_guid())自动生成,插入一条数据到数据库后,需要获取该条数据的ID 解决方案: (1)Service层生成UUID p ...

  3. javaweb项目静态资源被拦截的解决方法

    <servlet-mapping> <servlet-name>springMvc</servlet-name> <url-pattern>/*< ...

  4. ATOM常用插件推荐

    转载:http://blog.csdn.net/qq_30100043/article/details/53558381 ATOM常用插件推荐 simplified-chinese-menu ATOM ...

  5. RockerMQ消息消费、重试

    消息中间件—RocketMQ消息消费(一) 消息中间件—RocketMQ消息消费(二)(push模式实现) 消息中间件—RocketMQ消息消费(三)(消息消费重试) MQ中Pull和Push的两种消 ...

  6. Linux stress CPU的测试方法

    一.stress工具安装:1.获取stress源码安装包(stress-1.0.4.tar.gz)3.解压并安装 [root@localhost /]#cd /tmp/ [root@localhost ...

  7. 通过springboot 去创建和提交一个表单(七)

    创建工程 涉及了 web,加上spring-boot-starter-web和spring-boot-starter-thymeleaf的起步依赖. 1 2 3 4 5 6 7 8 9 10 11 1 ...

  8. shiro学习笔记-Subject#login(token)源码实现过程

    追踪Subject的login(AuthenticationToken token)方法,其调用的为DelegatingSubject类的login方法,DelegatingSubject实现了Sub ...

  9. linux下详解shell中>/dev/null 2>&1

    前言 相信大家经常能在shell脚本中发现>/dev/null 2>&1这样的语句.以前的我并没有去深入地理解这段命令的作用,照搬照用,直到上周我将这段命令不小心写成了2>& ...

  10. java的小程序在html中的运行测试

    java的小程序在html中的运行测试,打开vs2012,以网站模式打开,生成,调用iis临时服务器运行.