我爱编程

爬虫基础

2018-04-01  本文已影响30人  nine_9

1-1主要内容lscrapy概述及安装lscrapy基础操作n入门程序l核心APIl案例操作~10个爬虫程序[10个不同的类型的网站数据]lscrapy shelll深度爬虫l请求响应对象l分布式操作等等1-2内容1.scrapy概述官方网站:http://scrapy.org [orginzation]使用Python开发的主要进行数据采集的一个应用程序框架,核心使用它来进行爬虫程序的快速开发,底层使用了twisted异步模块,所以在进行数据采集下载时效率非常高!ubuntu/macos 下,在有完善的python环境的基础上直接安装 scrapywindows下:注意~安装分两步进行l先安装scrapy# 管理员身份运行cmd窗口pip install scrapyoreasy_install scrapyPS:注意安装完scrapy之后,可以正常的进行scrapy项目的开发,但是在windows上运行项目会出现问题,如果出现类似于WinError这样的的问题,请安装下面的模块l安装win32# 需要安装一个pypiwin32模块,用于scrapy模块可能调用win底层C库进行函数操作pip install pypiwin322.项目开发——创建scrapy项目通过执行如下命令,来创建scrapy项目# 通过scrapy命令,加上startproject选项,创建一个名称为spider_name的爬虫项目scrapy startproject在pycharm中直接运行工具中的cmd终端窗口,执行如下命令创建一个爬虫项目

scrapy startproject myspider

注意:关于终端窗口、命令窗口、shell窗口

windows系统中:终端窗口、命令窗口 -> cmd窗口

新系统中win10:shell窗口->power shell->可以执行常见的linux命令

终端窗口~Terminal

ubuntu(like linux/unix)系统中:终端~shell->shell命令窗口

Terminal->shell窗口

Mac OS: 终端->shell窗口

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

|-- myspider/  项目根目录

    |-- scrapy.cfg  项目配置文件 [cfg: config]

|-- myspider/  爬虫 模块->以后的爬虫程序开发都在这个模块中

|-- spiders/  爬虫程序所在的目录

|-- items.py  采集的数据->定义封装模型类的模块

|-- pipelines.py 采集的数据->采集完成之后进行数据验证、存储的模块

|-- middlewares.py 中间件定义的模块

|-- settings.py 项目设置模块

3. 开发爬虫程序

准备工作,分三步进行

(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=2

招聘岗位:job

发布公司:company

薪水待遇:salary

(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()

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

为了可以直接使用scrapy内置的爬虫操作,让scrapy自动采集数据,我们需要定义一个爬虫处理类

l 在spiders/zhilianspider.py模块中定义ZhilianSpider类型

l 继承自scrapy.Spider

l 类型中的属性:name属性~爬虫名称,用于在命令行启动爬虫时调用

l 类型中的属性:start_urls属性~采集数据的初始url地址[列表、元组]

l 类型中的属性:allowed_domains属性~采集数据的网站域名限制

l 类型中的方法:parse(self, response)采集完数据之后自动执行的函数

数据处理

(4) 核心:在pipelines.py模块中,定义处理Item数据的piplelines,将数据存储到数据库中给其他项目做数据准备

备注:

引擎:engine->scrapy引擎模块:engine.py

调度器:scheduler->scrapy调度模块:scheduler.py

下午课程安排:

l 回顾:python~orm操作

l 了解:orm->mysqldb\pymysql\sqlalchemy

n mysqldb:2.4- 3.4- [2.7—兼容性很差]【了解】

n pymysql:逐步取代mysqldb成为主流底层orm操作模块

n sqlalchemy:逐步成为python操作mysql数据库的主流模块

n 扩展:了解python操作oracle数据库、mongdb数据库\postgresql数据库的核心操作模块

l 掌握:sqlalchemy 操作数据

n 回顾面向对象的封装

n 爬虫中数据处理的使用——爬虫程序中使用sqlalchemy操作数据

l 扩展:pymongo 操作数据

l 核心:项目案例~10个爬虫程序[10个不同的类型的网站数据]

n 3种不同数据的采集(技术实现)

u 反爬虫较为复杂网站的数据操作[selenium + phantomjs]

l 新浪微博登录之后的个人中心页面数据,提取[微博主名称、发布的微博,发布的时间]

u 智联招聘网站数据的采集[工作、公司、薪水]->mysql、mongodb

u 段子来了[段子、发布时间、发布人]->mysql、mongodb

n 采集5W条商品数据

u 商品图片、名称、单价、描述[、 类型]

u 统计采集的时间、数据量大小

n 任务:和10班的同学进行沟通,提供爬虫程序采集适量数据

u 1~5个人一组,负责对方一个项目的数据提供

1. orm操作

orm:object relation mapping 对象关系映射,主要用于将程序中的数据和数据库中的记录进行对应之后的增删改查操作的一种编程思想

2. 常规的orm操作

python->mysqldb完成基础的orm操作

mysqldb->python2.4- python-3.4-

python->pymysql完成基础操作,替代mysqldb

pymysql.install_as_MySQLdb()

python高效orm处理->sqlalchemy较为完善的框架,可以直接进行数据的CRUD

3. sqlalchemy

核心主要针对mysql数据库的一个orm操作模块,对py2\py3都有良好的支持

mysqldb/pymysql/sqlalchemy->官方文档[操作手册]

4. 爬虫中对于sqlalchemy的使用

爬虫的核心:采集数据->数据存储[内存、文件、数据库]

数据采集->数据筛选->数据存储->数据清洗->数据分析->结果呈现

数据筛选:

scrapy框架默认提供了各种筛选方式,通过选择器Selector进行处理,内建并且封装好,可以直接通过response响应对象调用

重点内容:爬虫采集数据筛选测试

进入命令行,执行命令

scrapy shell “url”

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

scrapy完整的项目流程

l 创建爬虫项目[可以包含多个爬虫程序]

n scrapy startproject myspider

l 定义采集数据的Item封装类型

n 修改myspider/items.py,添加ZhilianItem

n 继承scrapy.Item

n 属性通过scrapy.Field()定义

l 开发爬虫程序

n 在myspider/spiders/添加zhilianspider.py模块

n 定义ZhilianSpider类型【爬虫程序】

n 继承scrapy.Spider

n name属性:爬虫名称,用于在命令行启动指定爬虫使用

n allowed_domains属性:域名限制~限制爬虫只能在某个域名下进行数据采集

n start_urls属性:元组/列表,定义了所有初始采集数据的url路径

n parse(self, response)函数:函数中的response参数接受了下载模块采集到的url中的数据

u 这个函数中,可以进行数据的xpath/re/css选择器进行筛选

u 将筛选得到的数据,封装在ZhilianItem对象中

u 通过协程的方式将item对象交给pipelines.py模块进行处理

l yield item

l 开发管道模块

n 修改myspider/pipelines.py模块,添加ZhilianPipleline类型

u __init__(self):主要用于进行资源的初始化操作,如打开文件、打开和数据库的连接等等,有必要编写

l 初始化了sqlalchemy的数据库连接

u open_spider(self, spider):当spider爬虫启动的时候自动调用的函数,也经常用于精确的资源初始化工作,一般不写

u close_spider(self, spider):当spider爬虫关闭的时候自动调用的函数,经常用于资源的回收,如关闭打开的文件、关闭数据库连接等等,有必要编写

l 关闭了sqlalchemy的数据库连接

u process_item(self, item, spider):核心处理函数,进行采集到的数据item中的实际数据的验证、存储工作,必须写

l 通过sqlalchemy进行了数据的存储

n 修改myspider/settings.py设置文件,添加ITEM_PIPELINES = []配置选项中,将我们自定义的ZhilianPipeline注册给scrapy

l 完成!数据被正确采集到了数据库中

注意问题:

Python2的编码问题、数据库交互时的编码问题

网页数据分析问题[耗时耗力,要有耐心]

注意scrapy的编程步骤!

上一篇 下一篇

猜你喜欢

热点阅读