scrapy第一步

1.scrapy概述

1.1. 官方网站:http://scrapy.org [orginzation]
1.2. Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。

2.scrapy安装

2.1 :ubuntu/macos 下,在有完善的python环境的基础上直接安装 scrapy
2.2:windows下:注意~安装分两步进行

1.先安装scrapy
# 管理员身份运行cmd窗口
pip install scrapy
or
easy_install scrapy

PS:注意
安装完scrapy之后,可以正常的进行scrapy项目的开发,但是在windows上运行项目会出现问题,如果出现类似于WinError这样的的问题,请安装下面的模块

2.安装win32
# 需要安装一个pypiwin32模块,用于scrapy模块可能调用win底层C库进行函数操作
pip install pypiwin32

3. 项目开发——创建scrapy项目

3.1:通过执行如下命令,来创建scrapy项目

# 通过scrapy命令,加上startproject选项,创建一个名称为spider_name的爬虫项目
scrapy startproject <spider_name>

例如:在pycharm中直接运行工具中的cmd终端窗口,执行如下命令创建一个爬虫项目

scrapy startproject myspider

创建好的项目文件结构如下:

|-- myspider/  项目根目录
    |-- scrapy.cfg  项目配置文件 [cfg: config]
    |-- myspider/  爬虫 模块->以后的爬虫程序开发都在这个模块中
        |-- spiders/   爬虫程序所在的目录
        |-- items.py   采集的数据->定义封装模型类的模块
        |-- pipelines.py 采集的数据->采集完成之后进行数据验证、存储的模块
        |-- middlewares.py 中间件定义的模块
        |-- settings.py 项目设置模块

4. 开发爬虫程序-智联

准备工作,分四部步进行
4.1:分析爬虫要采集的url地址,分析采集的数据字段

http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=%E7%88%AC%E8%99%AB&sm=0&sg=cab76822e6044ff4b4b1a907661851f9&p=1]http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=%E7%88%AC%E8%99%AB&sm=0&sg=cab76822e6044ff4b4b1a907661851f9&p=1)

http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=%E7%88%AC%E8%99%AB&sm=0&sg=cab76822e6044ff4b4b1a907661851f9&p=2]
招聘岗位:job
发布公司:company
薪水待遇:salary

4.2:定义采集的字段封装的Item类型,在items.py模块中,定义Item类

我们通过scrapy项目中的items.py模块定义封装采集数据字段的类型
为了能使用scrapy提供的各种内置功能,让定义的类型继承自scrapy.Item类型;类型中的字段属性通过scrapy.Field()进行定义!

import scrapy

class ZhilianItem(scrapy.Item):
    '''
    自定义封装智联招聘的item类型,用于封装采集到的智联网站的数据
    '''
    # 定义属性字段
    job = scrapy.Field()
    company = scrapy.Field()
    salary = scrapy.Field()

4.3:在spiders/zhilianspider.py中开发爬虫程序,采集初步数据

为了可以直接使用scrapy内置的爬虫操作,让scrapy自动采集数据,我们需要定义一个爬虫处理类
1.在spiders/zhilianspider.py模块中定义ZhilianSpider类型
2.继承自scrapy.Spider
3.类型中的属性:name属性~爬虫名称,用于在命令行启动爬虫时调用
4.类型中的属性:start_urls属性~采集数据的初始url地址[列表、元组]
5.类型中的属性:allowed_domains属性~采集数据的网站域名限制
6.类型中的方法:parse(self, response)采集完数据之后自动执行的函数

4.4:核心:在pipelines.py模块中,定义处理Item数据的piplelines,将数据存储到数据库中给其他项目做数据准备
备注:
引擎:engine->scrapy引擎模块:engine.py
调度器:scheduler->scrapy调度模块:scheduler.py

5.爬虫采集数据筛选测试

进入命令行,执行命令
scrapy shell “url”
执行之后进入python命令行,此时~响应的数据已经被包含到response变量中了,可以直接操作response进行数据筛选测试

6.开发一个完整项目的流程

  • 创建爬虫项目[可以包含多个爬虫程序
    scrapy startproject myspider
  • 定义采集数据的Item封装类型
    修改myspider/items.py,添加ZhilianItem
    继承scrapy.Item
    属性通过scrapy.Field()定义
  • 开发爬虫程序
在myspider/spiders/添加zhilianspider.py模块
定义ZhilianSpider类型【爬虫程序】
继承scrapy.Spider
name属性:爬虫名称,用于在命令行启动指定爬虫使用
allowed_domains属性:域名限制~限制爬虫只能在某个域名下进行采集 start_urls属性:元组/列表,定义了所有初始采集数据的url路径
parse(self, response)函数:函数中的response参数接受了下载模块采集到的url中的数据    
         这个函数中,可以进行数据的xpath/re/css选择器进行筛选
         将筛选得到的数据,封装在ZhilianItem对象中
         通过协程的方式将item对象交给pipelines.py模块进行处理
              yield item

  • 开发管道模块
修改myspider/pipelines.py模块,添加ZhilianPipleline类型
    __init__(self):主要用于进行资源的初始化操作,如打开文件、打开和数据库的连接等等,有必要编写
          初始化了sqlalchemy的数据库连接
    open_spider(self, spider):当spider爬虫启动的时候自动调用的函数,也经常用于精确的资源初始化工作,一般不写
    close_spider(self, spider):当spider爬虫关闭的时候自动调用的函数,经常用于资源的回收,如关闭打开的文件、关闭数据库连接等等,有必要编写
          关闭了sqlalchemy的数据库连接
    process_item(self, item, spider):核心处理函数,进行采集到的数据item中的实际数据的验证、存储工作,必须写
          通过sqlalchemy进行了数据的存储
修改myspider/settings.py设置文件,添加ITEM_PIPELINES = []配置选项中,将我们自定义的ZhilianPipeline注册给scrapy   完成!数据被正确采集到了数据库中

PS:注意问题:
Python2的编码问题、数据库交互时的编码问题
网页数据分析问题[耗时耗力,要有耐心!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容