本文从一个基础案例入手,较为详细的分析了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等属性,详细内容可参考以下代码注释。

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

3、编写item.py

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

  1. # -*- coding:utf-8 -*-
  2. # 定义爬取对象属性
  3. import scrapy
  4. classDmozItem(scrapy.Item):
  5. title = scrapy.Field()
  6. link = scrapy.Field()
  7. desc = scrapy.Field()
  8. 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格式。

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

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

5、设置Settings.py

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

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

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. [pat]数素数

    时间限制:1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 令Pi表示第i个素数.现任给两个正整数M <= N < ...

  2. 廖雪峰网站:学习python基础知识—list和tuple(二)

    1.list """ Python内置的一种数据类型是列表:list. list是一种有序的集合,可以随时添加和删除其中的元素. """ c ...

  3. 『TensorFlow』第十弹_队列&多线程_道路多坎坷

    一.基本队列: 队列有两个基本操作,对应在tf中就是enqueue&dequeue tf.FIFOQueue(2,'int32') import tensorflow as tf '''FIF ...

  4. bat语法需要注意的地方

    if else 格式                            if exist C:\Python27  ::空格  (                      ::(与if在同一行  ...

  5. Oracle11g ADG环境实施文档-1204

    Oracle11g adg 环境搭建实施手册-1204 2017年8月30日 9:16 11g adg 环境搭建实施手册-0824 2017年8月24日 10:18 ################# ...

  6. 【转】vue+axios 前端实现登录拦截(路由拦截、http拦截)

    一.路由拦截 登录拦截逻辑 第一步:路由拦截 首先在定义路由的时候就需要多添加一个自定义字段requireAuth,用于判断该路由的访问是否需要登录.如果用户已经登录,则顺利进入路由, 否则就进入登录 ...

  7. tf.expand_dims 来增加维度

    主要是因为tflearn官方的例子总是有embeding层,去掉的话要conv1d正常工作,需要加上expand_dims network = input_data(shape=[None, 100] ...

  8. selinux介绍/状态查看/开启/关闭

    SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统--百度百科. 基于经验来说SELinux在 ...

  9. Struts 2 初步入门(二)

    Struts 2 动态方法调用 1.在HelloWorldAction中添加两个新的方法如下: import com.opensymphony.xwork2.ActionSupport; public ...

  10. linux 安装Git详细过程

    1.首先git --version 查看 Git  https://mirrors.edge.kernel.org/pub/software/scm/git/ 2.下载 wget https://Gi ...